首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Useful Links
Minecraft Wiki
合成配方
V2EX  ›  Minecraft

mc 服务端怎么样才能在 Linux 上实现随服务器自启?的?

  •  
  •   starsriver · 86 天前 via Android · 5070 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 linux 中启动 mc 服务器的时候需要 cd 到指定目录,然后运行 jar。

    比如说 cd /var/mc/server1,然后执行 java -jar ......就会在 server1 这个目录里面生成服务端数据,cd 到 server2 再启动 jar 又会在 server2 文件夹里面生成数据和文件。

    启动脚本是一个 shell 文件,如果只在里面写 java -jar.....就必须每次都 cd 到目录再运行 sh 文件来启动服务,在 sh 中用 cd 又会出现目录找不到的问题(还没有验证开机自动运行 sh 或 crontab 运行会发生什么)

    请问有经验的 v 友是怎么做到开机自启以及在指定目录运行服务端的(不要谈面板)
    21 回复  |  直到 2019-08-20 12:24:19 +08:00
        1
    misaka19000   86 天前
    没懂什么意思

    java -jar 使用绝对路径不行吗,或者指定文件路径不也可以?标准输出的话重定向一下就可以了
        3
    jybox   86 天前
    看你用的是 systemd、init 还是 upstart,查对应文档。

    或者 crontab 里面 @reboot (详见文档)
        4
    starsriver   86 天前 via Android
    @misaka19000 标题没表达清楚😅。

    打个比方:我的地图文件,插件都在 a 目录里面放着,这时候 cd 到 a 目录再启动 jar 就是正常的服务,但是如果我在 b 目录里面运行 jar,就会在 b 目录里面生成一套新的数据,相当于启动了一个全新的服务端。

    我想让 linux 开机的时候自动启动服务端,这就需要脚本实现了。和 win 的 bat 不一样,win 执行 bat 的时候默认路径就是 bat 所在目录,启动的服务也是 bat 目录下的数据文件,但是 shell 脚本执行的时候会有意思,如果我在 xshell 窗口运行 shell 脚本,就不能通过脚本访问到 a 目录,这时候运行 jar 就会导致在 b 目录生成新文件。虽然 mc 服务是启动了,但是地图和玩家数据是位于 a 文件夹的。
        5
    misaka19000   86 天前
    简单,在 shell 中找到目标文件的路径,之后进入这个目录就行
        6
    starsriver   86 天前 via Android
    @misaka19000

    #!/bin!sh
    cd /.....

    这个 cd 没有用的。。
        7
    gerardyang   86 天前 via Android
    @starsriver set 一个环境变量啊
        8
    KasuganoSoras   86 天前   ♥ 2
    # vim /etc/systemd/system/minecraft.service

    [Unit]
    Description=Minecraft Server
    Wants=network-online.target
    After=network-online.target

    [Service]
    User=root
    WorkingDirectory=/<服务端目录>/
    LimitNOFILE=4096
    PIDFile=/var/run/minecraft/server.pid
    ExecStart=/usr/bin/java -Xmx 最大内存 M -Xms 最小内存 M -jar <jar 名字>
    Restart=on-failure
    StartLimitInterval=600

    [Install]
    WantedBy=multi-user.target

    # systemctl daemon-reload
    # systemctl enable minecraft --now

    完事了
        9
    oneisall8955   86 天前 via Android
    开机你自己怎么敲命令,就写一个脚本到 systemd service 服务上 enabled 它或者编辑 /etc/ rc.local 执行 shell 脚本吧,注意环境变量一致和尽量使用绝地路径
        10
    ech0x   86 天前 via iPhone
    systemd
        11
    misaka19000   86 天前
    cd $(dirname ${0})

    搞定
        12
    starsriver   86 天前 via Android
    @misaka19000 我傻了想死一会儿。

    忘了 dos 的编码和 unix 不一样。。
        13
    alphatoad   86 天前 via iPhone
    systemd
        14
    des   86 天前 via Android
    WorkingDirectory 正解
        15
    Z1on   86 天前 via Android
    试试 docker ?
        16
    no1xsyzy   86 天前
    #12 啊哈,我猜是 / 和 \ 搞错了
        17
    verdad   85 天前 via iPad
    请尊重历史,用 GNU/Linux。“ Linux 系统”是错误的。
    @no1xsyzy @0x4F5DA2 @explore2233 @nguoidiqua @DIYff
        18
    no1xsyzy   85 天前
    @verdad 那我明确说了,你修正的方向根本不对。
    应该更正 Linux 为 *nix 或者 Unix-like 或者 POSIX
    现在讨论的不是某个特定项目或者特定完整系统,而是在这套规范上的应用。
    你根本不尊重 BSD、alpine、musl、busybox、herd、OS/2、HP-UX。
        19
    verdad   85 天前 via iPad
    照你的意思,我说句“老师好”就不尊重父母了?
    @no1xsyzy @0x4F5DA2 @explore2233 @nguoidiqua @DIYff
        20
    no1xsyzy   85 天前
    @verdad 打个比方,A 对其伯伯喊叔叔好,你非要纠正成老师好?你这算尊重吗?
    另外,你有必要把所有人都带上吗?
        21
    no1xsyzy   85 天前
    @verdad 已 Red
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3259 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 05:00 · PVG 13:00 · LAX 21:00 · JFK 00:00
    ♥ Do have faith in what you're doing.