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

2019-08-18 23:21:09 +08:00
 starsriver
在 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 友是怎么做到开机自启以及在指定目录运行服务端的(不要谈面板)
18268 次点击
所在节点    Minecraft
21 条回复
misaka19000
2019-08-18 23:23:22 +08:00
没懂什么意思

java -jar 使用绝对路径不行吗,或者指定文件路径不也可以?标准输出的话重定向一下就可以了
charlie21
2019-08-18 23:25:19 +08:00
jybox
2019-08-18 23:27:57 +08:00
看你用的是 systemd、init 还是 upstart,查对应文档。

或者 crontab 里面 @reboot (详见文档)
starsriver
2019-08-18 23:45:00 +08:00
@misaka19000 标题没表达清楚😅。

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

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

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

这个 cd 没有用的。。
gerardyang
2019-08-18 23:58:42 +08:00
@starsriver set 一个环境变量啊
KasuganoSoras
2019-08-19 00:03:01 +08:00
# 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

完事了
oneisall8955
2019-08-19 00:05:05 +08:00
开机你自己怎么敲命令,就写一个脚本到 systemd service 服务上 enabled 它或者编辑 /etc/ rc.local 执行 shell 脚本吧,注意环境变量一致和尽量使用绝地路径
ech0x
2019-08-19 00:07:37 +08:00
systemd
misaka19000
2019-08-19 00:21:02 +08:00
cd $(dirname ${0})

搞定
starsriver
2019-08-19 03:24:03 +08:00
@misaka19000 我傻了想死一会儿。

忘了 dos 的编码和 unix 不一样。。
alphatoad
2019-08-19 03:36:25 +08:00
systemd
des
2019-08-19 09:00:29 +08:00
WorkingDirectory 正解
Z1on
2019-08-19 10:18:34 +08:00
试试 docker ?
no1xsyzy
2019-08-19 10:50:43 +08:00
#12 啊哈,我猜是 / 和 \ 搞错了
verdad
2019-08-19 13:30:45 +08:00
请尊重历史,用 GNU/Linux。“ Linux 系统”是错误的。
@no1xsyzy @0x4F5DA2 @explore2233 @nguoidiqua @DIYff
no1xsyzy
2019-08-19 15:05:58 +08:00
@verdad 那我明确说了,你修正的方向根本不对。
应该更正 Linux 为 *nix 或者 Unix-like 或者 POSIX
现在讨论的不是某个特定项目或者特定完整系统,而是在这套规范上的应用。
你根本不尊重 BSD、alpine、musl、busybox、herd、OS/2、HP-UX。
verdad
2019-08-20 10:06:15 +08:00
照你的意思,我说句“老师好”就不尊重父母了?
@no1xsyzy @0x4F5DA2 @explore2233 @nguoidiqua @DIYff
no1xsyzy
2019-08-20 12:24:06 +08:00
@verdad 打个比方,A 对其伯伯喊叔叔好,你非要纠正成老师好?你这算尊重吗?
另外,你有必要把所有人都带上吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/592975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX