Crontab Permission Denied

Philip Larson picture Philip Larson · Nov 27, 2012 · Viewed 17.2k times · Source

I'm having problem with crontab when I'm running a script.

My sudo crontab -e looks like this:

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

And the start.sh looks like this:

#!/bin/sh
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui

and have these permissions (ls -l output)

-rwxr-xr-x 1 eve eve  72 Nov 24 14:17 start.sh

I can run the command from the terminal, either using sudo or not

./start.sh

But it wont start with crontab. If i do

grep -iR "start.sh" /var/log

I get the following output

/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

So my question is, why isn't it working? And since my script run without using sudo, I don't necessarily need to put it in sudo crontab?

( and I'm using Ubuntu 12.10 )

Thanks in advance, Philip


Answer to twalberg's response

1. Changed owner on craftbukkit to root, to see if that fixed the problem.

-rw-r--r-- 1 root root 12084211 Nov 21 02:14 craftbukkit.jar

and also added an explicit cd in my start.sh script as such:

#!/bin/sh
cd /opt/mcserver/
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui

2. I'm not quite sure what you mean here. Should I use the following path in my start.sh file when i start java? (output from which java)

/usr/bin/java

3. When my server closes, screen is terminated. Is it a good idea to start screen in "detached mode" anyway?

Still got the same "Permission denied" error.


Problem solved! By using the proper flag on screen, as below, it is now working as it should!

screen -d -m java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui

Thanks a lot to those who answered, and especially twalberg!

Answer

Niclas Larsson picture Niclas Larsson · Nov 27, 2012

start.sh is owned by "eve:eve" and your crontab is running as root.

You can solve this by running following command

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

Your crontab will be running as root though.

Tip: When running bash in crontab always use absolute paths (it will make debugging a lot easier).