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