crontab is not working.

I have a script which name is sicaklik.sh
It is in the root directory.
I can run manually but I want to run automatically every 3 minutes but it is not working. WHY?

#whoami
root
#crontab -l
#ident  "@(#)root       1.21    04/03/23 SMI"
3 * * * *  sh ./sicaklik.sh
#ls -l sicaklik*
-rwxrwxrwx   1 root     root         135 Jul 25 01:45 sicaklik.sh
-rwxrwxrwx   1 root     root           0 Jul 25 02:08 sicaklik.temp
SETRA{root}/>
#cat sicaklik.sh 
/usr/sbin/ipmitool sdr type temperature  | grep T_AMB > /sicaklik.temp 
scp /sicaklik.temp 192.168.40.184:/usr/local/nagios/temp.temp

I would do a few things:

1) redirect stdout and stderr of the script some place
2) supply the full path of the script. ./scriptname is bad form. Makes the assumption that cron sets the working directory to the directory that the script resides in. May or may not be the case, but don't risk it.
3) Add a !# line to the script and remove sh from the command line in the crontab.

3 * * * *  /home/root/bin/sicaklik.sh >/tmp/sicaklik.log 2>&1

This is a guess as to the path of the script but should illustrate what I mean.

#!/bin/sh 
/usr/sbin/ipmitool sdr type temperature  | grep T_AMB > /sicaklik.temp 
scp /sicaklik.temp 192.168.40.184:/usr/local/nagios/temp.temp

Adding the #! will cause the script to be run with sh.

Dude, I faced the same problem few days back while executing a script..It ran perfectly fine from the command line but crontab wasn't able to execute it..
However when I inserted my environment variables into the script it ran from crontab..This may work out for you as well..Try it out..Just specify your environment into the script and it will work fine...

U can also try including ur ".profile" into the script with the addition of command inside ur script so that it can take all the environment variables defined for ur profile...

. /root/.bash_profile

However if this doesn't work out you will have to set your environment manually inside the script to make it executable from cron...

Thanks friends for your information but I understand that below line isn't for every 3 minutes.

3 * * * * /sicaklik.sh

If the O.S had linux below line can work fine but this is Solaris.

*/3 * * * * /sicaklik.sh

So, I must do like below but I have given error messages.

3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60 * * * *  /sicaklik.sh

error messages :

"/tmp/crontabiGaaqa" 16 lines, 561 characters 
3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60 * * * * /sicaklik.sh
crontab: error on previous line; number out of bounds.
crontab: errors detected in input, no crontab file generated.
#

How can I run every 3 minutes this script. Why do I give above error messages.

I have tried alternative method but it was fail.

pwd
/etc/cron.d
#/etc/cron.d>ls
at.deny    cron.deny  FIFO       queuedefs  sicaklik
#/etc/cron.d>cat sicaklik
MAILTO=name.sordum@cevapla.com.tr

3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60 * * * * /sicaklik.sh

#/etc/cron.d>

I completely missed that your first example would run only on the third minute after the hour!!

The error is coming from the 60. Use 0,3,6... and drop the 60. Also, unless your script resides at the root level, which is an odd place to have it, /sicaklik.sh won't be found.

1 Like

Hey dud I understand main problem.
Script location,paths or something like that.
Main problem is

60

:smiley:

3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /sicaklik.sh

Thanks for your advise.

Yesterday I resolved this issue with different solution.

#cat sicaklik.done 
while true
 do
     /sicaklik.sh
     sleep 180      // every 3 minutes.
 done
#

For startup when machine is rebooted.

#cd /etc/rc3.d/
#/etc/rc3.d>ls
README          S16boot.server  S50apache       S52imq          S80mipagent     S84appserv      S93sicaklik.sh
#etc/rc3.d>cat S93sicaklik.sh 
/bin/bash $HOME/sicaklik.done > $HOME/var/log/sicaklik.log 2>&1 & :b:

#etc/rc3.d>

hm, I have a feeling cron is better idea..