4

我在运行脚本时遇到了 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!

4

3 回答 3

1

start.sh归“eve:eve”所有,您的 crontab 以 root 身份运行。

您可以通过运行以下命令来解决此问题

chown root:root /opt/craftbukkit/start.sh 

不过,您的 crontab 将以 root 身份运行。

提示:在 crontab 中运行 bash 时,始终使用绝对路径(这将使调试更容易)。

于 2012-11-27T10:37:55.413 回答
1

以下是一些需要检查的事项:

  1. root显然对 具有读取/执行权限start.sh,但是什么是权限craftbukkit.jar- 可以root读取它?您可能还想cd /path/to/where/craftbukkit.jar/isstart.sh脚本中添加显式。
  2. javaroot的默认路径内cron吗?请注意,此路径不一定与您通过sudosu直接以 root 登录的路径相同 - 它通常受到更多限制。使用完整的路径名来java解决craftbukkit.jar这个问题。
  3. 由于screen不会从可用的终端开始,您可能需要screen -d -m ...。希望您打算最终附加到每个screen实例并稍后终止它,或者您已安排它在脚本完成时自动终止......
  4. /var/log/syslog条目显示cron实际上确实执行了脚本,因此它一定是由于上述原因之一而失败(或者我还没有注意到的其他原因)
  5. 其他错误grep仅仅是因为您的非root用户没有读取这些特定文件的权限(这是正常的,而且是件好事)。
于 2012-11-28T17:55:18.057 回答
0

日志显示用户无权访问目录“/var/log/”,您应该为 cron 的所有者设置日志文件的许可。

于 2012-11-27T10:43:09.330 回答