How to check the execution time of your script in cron?
Do you have a long running script on your server’s cron list?
And you really wanna get notified about the total execution time for your cron? Yeah, here we go! We can not find out the total execution time from the cron log.
However, you can check the cron execution status from the log /var/log/cron. One of my friends asked me about this question. He wanted to find out the total execution time of his cron job.
I did some search on Google and found out a solution by using SECONDS builtin variable available in Linux Bash. It tracks the number of seconds that have passed since the shell was started.
You need to set this variable 0, before starting the script. The value returned after some work is equal to the sum of assigned value (here 0) and the total time spend just before we called the SECONDS variable again.
I am using the “seq” command to generate a sequence and save it to a file. And we can check the time for cron execution using SECONDS builtin variable.
The sample code in a cron is pasted below:
File : /root/diff2.sh
#!/bin/sh echo " " > /root/time.txt echo "Start time is: " $(date +%T) >> /root/time.txt SECONDS=0 seq 100000000 > /root/seq.txt echo "End time is: " $(date +%T) >> /root/time.txt duration=$SECONDS echo "Total time spend is pasted below:" echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed." >> /root/time.txt
[root@connect ~]# crontab -l */5 * * * * /bin/sh /root/diff2.sh
See the output here:
[root@connect ~]# cat /root/time.txt Start time is: 20:20:01 End time is: 20:21:16 Total time spend is pasted below: 1 minutes and 15 seconds elapsed.
One more[root@connect ~]# cat /root/time.txt Start time is: 00:30:01 End time is: 00:31:16 Total time spend is pasted below: 1 minutes and 15 seconds elapsed.
If you wish, you can set email alert for this cron.
There are many other options available to check the total time spend for a script. Please comment here, if you get a quick way than the one mentioned here 🙂
Please try it and let me know if you have any questions. Thanks for your time!!