我在运行脚本时遇到了 crontab 问题。
我的sudo crontab -e看起来像这样:
05 00 * * * /opt/mcserver/backup.sh
10 00 * * * /opt/mcserver/suspend.sh
05 08 * * * /sbin/shutdown -r +1
11 11 * * * /opt/mcserver/start.sh <--- This isn't working
start.sh看起来像这样:
#!/bin/sh
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
并拥有这些权限(ls -l 输出)
-rwxr-xr-x 1 eve eve 72 Nov 24 14:17 start.sh
我可以从终端运行命令,无论是否使用 sudo
./start.sh
但它不会从 crontab 开始。如果我做
grep -iR "start.sh" /var/log
我得到以下输出
/var/log/syslog:Nov 27 11:11:01 eve-desk CRON[5204]: (root) CMD (eve /opt/mcserver/start.sh)
grep: /var/log/btmp: Permission denied
grep: /var/log/lightdm/x-0-greeter.log: Permission denied
grep: /var/log/lightdm/lightdm.log: Permission denied
grep: /var/log/lightdm/x-0.log: Permission denied
所以我的问题是,为什么它不起作用?而且由于我的脚本在不使用 sudo 的情况下运行,我不一定需要将它放在 sudo crontab 中?
(我使用的是 Ubuntu 12.10)
在此先感谢,菲利普
回答特瓦尔伯格的回应
1.将craftbukkit的所有者更改为root,看看是否解决了问题。
-rw-r--r-- 1 root root 12084211 Nov 21 02:14 craftbukkit.jar
并且还在我的 start.sh 脚本中添加了一个明确的 cd :
#!/bin/sh
cd /opt/mcserver/
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
2.我不太清楚你在这里的意思。启动 java 时是否应该在 start.sh 文件中使用以下路径?(从哪个java输出)
/usr/bin/java
3.当我的服务器关闭时,屏幕被终止。无论如何以“分离模式”启动屏幕是个好主意吗?
仍然得到相同的“权限被拒绝”错误。
问题解决了!通过在屏幕上使用正确的标志,如下所示,它现在可以正常工作了!
screen -d -m java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
非常感谢那些回答的人,尤其是 twalberg!