31

I have a notify.sh script that looks like:

notify-send "hi welcome"

My crontab notification for 2 PM:

0 14 * * * home/hacks/notify.sh

However, this doesn't work. What is the problem?

0

7 Answers 7

45

Your script is missing a #! line at the start, which is the magic interpreted by the kernel to say which command interpreter is to be used for the script.

Make it look like this:

#!/bin/sh
notify-send "hi welcome"

and make sure the script is executable:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

Also, since you're asking for this to happen just once a day, is the timezone of the crontab the same as your own timezone? You might find this happening at 2pm GMT.

2
  • +1 This answer is awesome - particularly noting the point about the script needs to being executable! Thanks! Jan 9, 2015 at 6:10
  • Very subtle explanation. My upvote
    – Fokwa Best
    Oct 24, 2016 at 12:58
22

Making crontab running is easy only . Here I am going to say how to run crontab jobs. It is useful for anyone who is stuck on crontab.

*/1 * * * * cd /home/hacks && sh notify.sh

To make the script executable, we have to do:

chmod +x home/hacks/notify.sh

Here i run this script for every one minute ... By doing below script, you can write it in a log file to find whether its working

write log

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

send mail

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com
1
  • 2
    isnt that "*/1 * * * * sh /home/hacks/notify.sh" will also work ? Sep 25, 2015 at 1:14
5

4 hypothesis:

  • the cron daemon is not running (do a ps axfww | grep cron and check)

  • the notify-send is trying to send output to a terminal, or an X session -- but it is ran from within the cron environment and it does not know "who to talk to", so to speak.

  • your script is not executable

  • the home/ path in the crontab script is relative to the user the scripts gets executed as. Try using the full path

1

Add export DISPLAY=:0 above the notify-send line in your script. This addresses lornezog's second point.

0

You have to open crontab by the following command:

crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh

This will run your script once an hour from 8AM-3PM at 10 minutes past the hour every Monday, Wednesday and Friday.

0

First of All, we need to edit the crontab with Command crontab -eand than Inside this Crontab add the Path of Executable script and in your Case like this * 14 * * * home/hacks/notify.sh >/dev/null 2>&1 .

Start /Stop / restart cron service

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl stop crond.service

1
-3

quite simple, add following line at bottom of the crontab file via: sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &

1
  • This does not seem to be an answer to the question. Dec 28, 2018 at 19:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.