我有一个脚本,每次重启时都会启动我的 minecraft 服务器。我可以在日志中看到它正在调用 cmd,但没有打开任何屏幕。如果我手动运行脚本,/home/minecraft/scripts/startMinecraft.sh
它会完美运行。
这是我的 crontab:
@reboot /home/minecraft/scripts/startMinecraft.sh
38 00,06,12,16 * * * /home/minecraft/scripts/backup.sh
这是一个 centos 6 服务器。
这是我的startMinecraft.sh
脚本。
screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
正如我之前所说,如果我手动运行该精确的线路,它就能完美运行。
答案1
您有可能需要设置二进制文件的完整路径,screen
因为当 cron 作业运行时,它不会像您作为用户通过终端或 SSH 登录时设置的那样设置 $PATH 值。Stack Overflow 上的这个答案对整个事情进行了合理的解释。
因此我建议您将脚本从以下位置更改:
screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
对此:
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
并将其替换/path/to/screen
为您可以轻松获得的实际完整路径which
像这样:
which screen
输出结果如下:
/usr/bin/screen
或者,您可以通过将 $PATH 实际放置在脚本中来设置它,如下所示:
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
当然,这应该与您系统上的实际 PATH 值相匹配,您可以通过输入以下内容来获取:
echo $PATH
但我个人更喜欢完整路径方法,因为它对我来说更干净,并且 $PATH 值经常改变,所以您不希望在 Bash 脚本中出现混乱的值。
PS:另外,还有一件小事,你的 Bash 脚本应该在“她帮”在顶部像这样,所以你的脚本看起来会像这样:
#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
当然,/bin/bash
运行后它应该与你系统的实际 Bash 路径相匹配which bash
,但我怀疑它不会出现在/bin/bash
现代安装的路径中。