Как выполнить скрипт оболочки через crontab?

174897
Aravind

У меня есть notify.shскрипт, который выглядит так:

notify-send "hi welcome" 

Мой crontab уведомление на 2 часа дня:

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

Тем не менее, это не работает. В чем проблема?

22

6 ответов на вопрос

38
Phil P

В вашем сценарии отсутствует #! строка в начале, которая является магией, интерпретируемой ядром, чтобы сказать, какой интерпретатор команд должен использоваться для сценария.

Сделайте так, чтобы это выглядело так:

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

и убедитесь, что скрипт исполняемый:

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

Кроме того, поскольку вы просите, чтобы это происходило только один раз в день, совпадает ли часовой пояс crontab с вашим собственным часовым поясом? Это может произойти в 2 часа дня по Гринвичу.

+1 Этот ответ потрясающий - особенно отмечая, что сценарий должен быть исполняемым! Спасибо! FXQuantTrader 9 лет назад 0
Очень тонкое объяснение. Мой upvote Fokwa Best 8 лет назад 0
18
Aravind

Сделать запуск crontab просто. Здесь я собираюсь рассказать, как запускать задания crontab. Это полезно для всех, кто застрял на crontab.

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

Чтобы сделать скрипт исполняемым, мы должны сделать:

chmod +x home/hacks/notify.sh 

Здесь я запускаю этот скрипт каждую минуту ... Делая скрипт ниже, вы можете записать его в файл журнала, чтобы определить, работает ли он

написать журнал

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

Отправить письмо

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com 
разве "* / 1 * * * * sh /home/hacks/notify.sh" также будет работать? user1179459 9 лет назад 2
5
lorenzog

4 гипотеза:

  • демон cron не работает (выполните a ps axfww | grep cronи проверьте)

  • notify-send пытается отправить вывод на терминал или сеанс X - но он запускается изнутри cronсреды и не знает, с кем говорить, так сказать.

  • ваш скрипт не исполняемый

  • home/путь в сценарии кронтаба относителен пользователю сценарии запускается на выполнении, как. Попробуйте использовать полный путь

1
W_Whalley

Добавьте export DISPLAY=:0над строкой уведомления-отправки в вашем скрипте. Это относится ко второму пункту Лорнезога.

0
3498DB

Вы должны открыть crontab следующей командой:

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 

Это будет запускать ваш сценарий один раз в час с 8:00 до 17:00 в 10 минут после часа каждый понедельник, среду и пятницу.

0
kunal

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

Похожие вопросы