cron job not running
Hi everyone,
I want my computer to shut itself down at 1am everyday. So what I did was type "su -c 'crontab -e'" and added in the line: Code:
0 1 * * * init 0 I tried different things like adding quotation marks to "init 0", putting the full path ("/sbin/init 0"), and using an alternative command ("shutdown -h now"), but to no avail. What am I doing wrong? Thanks, Vince |
Try creating a log file to test:
0 1 * * * init 0 2>&1 > /tmp/shutdown.log Do you get anything in the log when it is supposed to run? |
No, apparently it doesn't even run because when I type "cat /tmp/shutdown.log", the file hasn't even been created.
|
Have you tried
/sbin/halt or /sbin/poweroff Instead of init 0 |
If that doesn't work it would be interesting to see if your cron jobs are even being run - try this one for example:
0 1 * * * date 2>&1 > /tmp/cron-test.log Do you see the correct date and time in the log file? ie - 1:30 |
You might try creating an empty log file first. Sometomes it will not create the file for you. Try this and see if it works.
Code:
touch /tmp/cron-test.log > /dev/null |
So I added the line "29 23 * * * date 2>&1 > /tmp/shutdown.log" to my crontab file, restarted crond, and made sure that I typed "touch shutdown.log" before 23:29. But yet nothing shows up in /tmp/shutdown.log.
Any more ideas? Thanks, Vince P.S. Hurray, my 400th post! |
What procedure did you use to add it to your crontab file?
|
su
crontab -e <edit> crontab -l (to verify) /etc/init.d/crond restart |
bump
|
Hey just a simple test to verify whether your crond is runninig
do <code>#su - #touch /root/cron_test #crontab -e and add the following job : 0,5,10,15,20,25,30,35,40,45,50,55 * * * * date >> /root/cron_test</code> After saving the file just verify crontab -l and also there is no need restart crond it will rebuilt its files again. This is only a test script and will put the output of date command in /root/cron_test after 5 mins every hour. Remember to remove it once you have tested it. .... Nitin Batta .... http://nitinb.blogspot.com __________________ If this helped you, please take the time to rate the value of this post by clicking the affero button |
Not sure if this is it, but make sure that the init file is in the path that cron is using to run. It does not run with the full path that your user account runs as. It also runs as the user for which the cron job was created - you will likely have to be root to run this cron job as it is written.
Put the full path to init - probably /sbin/init or /usr/sbin/init - It is common that the path that cron uses is very minimal unless you specify path as a variable in cron: PATH = /usr/sbin:/sbin:/bin:/usr/bin.....etc... |
Quote:
Quote:
Quote:
There's no other way to schedule a shutdown? |
Shutdown has execute permissions generally for only for the root.
Quote:
So you will set the shutdown as a cronjob for root. When you set a cronjob as any user you need not be logged in as that user for the job to run .... so its to set shutdown as a cronjob for root. #which shutdown /usr/bin/shutdown (Dummy O/p) so u'r crontab would be #crontab -e 0 1 * * * /usr/bin/shutdown -h now |
That's what I did originally but it didn't work.
I made sure that I su'ed before typing crontab -e. But nothing seems to happen unless I'm logged in as root. |
Quote:
Code:
$su - Crontab will execute all commands under the root privilidges. Also you can look at the logs in /var/log/messages to check it cron throws an error while running it. |
Quote:
1.) I typed "su" 2.) I entered the password. 3.) I typed "crontab -e". 4.) I added the line to shut the computer down. 5.) I saved. 6.) I typed "crontab -l" to verify. Everything okay. 7.) I typed "exit". But nothing happened when it was supposed to shut down. Quote:
|
bump
I even decided to use KCron to add the command graphically to my crontab but when 1am rolls around, nothing happens. Anyone? |
Does the user the cron is running as have rights to shutdown the computer?
|
Try using "su -", including the dash "-".
|
Where and when do I type "su -"? It seems to do the same thing as "su".
What is "su -" supposed to do. sjspig: The command should run as root even if the computer is logged on as a normal user. |
Quote:
su - will also give you root priv along with setting home dir to root and also will also change environment varibles like PATH acc to the specified in the initialisation file (eg .bash_profile or .bashrc) etc. :Pengy: |
I think my reply was not worded correctly. Does the user for which the cronjob exists currently have rights to shutdown the box? In other words, can you shutdown the box logged in as the user that you are defining the cron job for?
|
Quote:
nitin_batta: I think I get it. But where would I use "su -"? I can't put it in crontab because it would ask for a password. |
You might use sudo instead - that way you could set up the exact command and let that user run that command when the cronjob is executed. Something like:
0 2 * * * /usr/sbin/sudo /usr/sbin/shutdown -h now The user running the cronjob must have rights normally to shutdown the server. If you run /usr/sbin/shutdown -h now and the user can't shut the machine off then the user's crontab won't be able to either. There are other ways to make this work but the bottom line is that the user must have rights or it can't be done via crontab. Can you explain the user situation and if all of this sounds correct? |
Quote:
|
I don't know the exact process the gnome desktop uses to shutdown, but I imagine that is does something funky behind the scenes to make this work for you. Your best bet to do this command line is to use sudo and have it run the specific command in sudo. You could also just modify the crontab for root and have root shutdown when you want instead.
|
Quote:
|
Hi can you post your crontab entry that you are trying .
Acc to me whena cronjob is run the command does not get executed with the rights of crontab userr it gets executed under the priv of the user (root in your case) under whose name the crontab is set. To just do a check you can try and set the suid bit on the shutdown binary. Hope this shld work as now any user can shutdown the system from cli :Pengy: |
How do I change the suid on a binary?
The crontab entry is 0 1 * * * init 0 I have also tried 0 1 * * * /sbin/init 0 0 1 * * * "/sbin/init 0" (so the path is not the problem) 0 1 * * * /sbin/shutdown -h now 0 1 * * * "/sbin/shutdown -h now" (so using a diff. command is not the problem) None have worked. |
Quote:
You can set the suid bit using the chmod command. Code:
# chmod 4666 /sbin/shutdown |
Hmm something's bizarre... I did chmod 555 to shutdown so now I can shutdown without being root
but the cron job still doesn't load. This time I decided to use KCron to schedule my job. Here's my output for crontab -l: # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/kde-vicente/kcronCPW9Ja.tmp installed on Fri Oct 29 15:32:53 2004) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) # apagación 0,15,30,45 0,1,2,3 * * 1,2,3,4,5 shutdown -h now # apagación weekend 30 1,2,3,4,5 * * 6,7 shutdown -h now # This file was written by KCron. Copyright (c) 1999, Gary Meyer # Although KCron supports most crontab formats, use care when editing. # Note: Lines beginning with "#\" indicates a disabled task. It's 1:34am on Saturday and the scheduled 1:30 shutdown still hasn't come. |
Dude can you make set the uid bit on shutdown
assuming you have the binary shutdown at /sbin/shutdown Code:
now become root and Only one issue here is any user on the machine can shut it down. Nitin :) |
Have you tried this:
Edit as root: /etc/crontab 0 1 * * * root /sbin/shutdown -h now This will execute the command as root (assuming cron is working correctly) w/out sudo. --- If you were want to use SUDO you have to edit the sudoers file and add a NOPASSWD:shutdown to that user to allow it to shutdown without a password. example susoers file: User_Alias SHUTDWN = user Cmnd_Alias SHUTDOWN = /sbin/shutdown SHUTDWN = ALL=NOPASSWD:SHUTDOWN Then you could use crontab as user with SUDO to shutdown the machine w/out a password. Hopfully this helps in some way. |
Thanks guys, it works now. The main problem was with the permissions to run shutdown and putting that command's path in.
:) |
All times are GMT -5. The time now is 03:32 AM. |