Arpan Jain
Arpan Jain

Reputation: 146

Crontab not giving results

I am not in the root, I entered the following commands in the crontab:

*/1 * * * * /home/ajain/testscript.sh

The file testscript.sh has the following commands:

#!/bin/bash
echo "The script begins now"
ping -c 2 live.com
echo The script has been run on `date` >> /home/ajain/testscript.log
echo "The script ends now"
exit

The crontab is not giving the results, however, the following command is giving the result in the testscript.log file correctly, displaying the ping date.

bash testscript.sh

Why is the crontab not working?

Upvotes: 0

Views: 463

Answers (3)

3sky
3sky

Reputation: 890

You need do define script output.

Because of cron man page:

When executing commands, any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab, if such exists). The children copies of cron running these processes have their name coerced to uppercase, as will be seen in the syslog and ps output.

Fore everything else than echo The script has been run on 'date' >> /home/ajain/testscript.log you should check your/root's mail, or the syslog (eg. /var/log/syslog).

I could recommend make something like this:

*/1 * * * * /home/ajain/testscript.sh >> /home/ajain/script.log

@Edit

My crontab file on my user:

$crontab -l
# test
*/1 * * * * /home/3sky/tests/test.sh >> /home/3sky/tests/log.log

Script look like that:

#!/bin/bash
echo "The script begins now"
ping -c 2 live.com
echo The script has been run on `date`
echo "The script ends now"
exit

Permission on files:

test.sh - 0755/-rwxr-xr-x
log.log - 0644/-rw-r--r--

Output in log file:

$tail -20 log.log
2 packets transmitted, 0 received, 100% packet loss, time 10999ms

The script has been run on Thu Jun 21 12:18:12 CEST 2018
The script ends now
The script begins now
PING live.com (204.79.197.212) 56(84) bytes of data.

--- live.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 10999ms

The script has been run on Thu Jun 21 12:19:12 CEST 2018
The script ends now
The script begins now
PING live.com (204.79.197.212) 56(84) bytes of data.

--- live.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 10999ms

The script has been run on Thu Jun 21 12:20:12 CEST 2018
The script ends now

Upvotes: 0

Wanming Zhang
Wanming Zhang

Reputation: 333

remove >> /home/ajain/script.log, just add line to the top of file /home/ajain/testscript.sh:

#!/bin/bash

exec >> /home/ajain/script.log 2>&1

echo "The script begins now"
ping -c 2 live.com
echo "The script has been run on `date`"
echo "The script ends now"
exit

remove >> /home/ajain/script.log from crontab, just using:

*/1 * * * * /home/ajain/testscript.sh

Upvotes: 0

Abhijit Pritam Dutta
Abhijit Pritam Dutta

Reputation: 5581

You can fix it in two different ways.

  1. To provide full path to the script /home/ajain/testscript.sh. Here you don't even need to add bash because you have clearly mentioned in which shell your script should run i.e. first line of your script #!/bin/bash

  2. Add this line before executing the script

     set path=$path:/home/ajain/
    
     testscript.sh # no need to use bash in front of it
    

Also providing execution permission to a script is not just enough. You need to check whether the user who is going to execute the script has permission to the location of the script or not. That means whether user can do a cd /home/ajain/ or not.

Hope this will help you.

Upvotes: 2

Related Questions