1
misaka19000 2019-08-18 23:23:22 +08:00
没懂什么意思
java -jar 使用绝对路径不行吗,或者指定文件路径不也可以?标准输出的话重定向一下就可以了 |
2
charlie21 2019-08-18 23:25:19 +08:00
|
4
starsriver OP @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 2019-08-18 23:53:21 +08:00
简单,在 shell 中找到目标文件的路径,之后进入这个目录就行
|
6
starsriver OP |
7
gerardyang 2019-08-18 23:58:42 +08:00 via Android
@starsriver set 一个环境变量啊
|
8
KasuganoSoras 2019-08-19 00:03:01 +08:00 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 2019-08-19 00:05:05 +08:00 via Android
开机你自己怎么敲命令,就写一个脚本到 systemd service 服务上 enabled 它或者编辑 /etc/ rc.local 执行 shell 脚本吧,注意环境变量一致和尽量使用绝地路径
|
10
ech0x 2019-08-19 00:07:37 +08:00 via iPhone
systemd
|
11
misaka19000 2019-08-19 00:21:02 +08:00
cd $(dirname ${0})
搞定 |
12
starsriver OP |
13
alphatoad 2019-08-19 03:36:25 +08:00 via iPhone
systemd
|
14
des 2019-08-19 09:00:29 +08:00 via Android
WorkingDirectory 正解
|
15
Z1on 2019-08-19 10:18:34 +08:00 via Android
试试 docker ?
|
16
no1xsyzy 2019-08-19 10:50:43 +08:00
#12 啊哈,我猜是 / 和 \ 搞错了
|
17
verdad 2019-08-19 13:30:45 +08:00 via iPad
|
18
no1xsyzy 2019-08-19 15:05:58 +08:00
@verdad 那我明确说了,你修正的方向根本不对。
应该更正 Linux 为 *nix 或者 Unix-like 或者 POSIX 现在讨论的不是某个特定项目或者特定完整系统,而是在这套规范上的应用。 你根本不尊重 BSD、alpine、musl、busybox、herd、OS/2、HP-UX。 |
19
verdad 2019-08-20 10:06:15 +08:00 via iPad
|