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

22

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

notify-send "hi welcome"

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

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

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

Аравиндом
источник

Ответы:

39

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

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

#!/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
Очень тонкое объяснение. Мое мнение
Fokwa Best
18

Сделать запуск 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
Аравиндом
источник
2
разве "* / 1 * * * * sh /home/hacks/notify.sh" также будет работать?
user1179459
5

4 гипотеза:

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

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

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

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

lorenzog
источник
1

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

W_Whalley
источник
0

Вы должны открыть 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

Прежде всего, нам нужно отредактировать crontab с помощью Command, crontab -eа затем внутри этого Crontabдобавить скрипт Path of Executable и в вашем случае вот так * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Запуск / остановка / перезапуск службы cron

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

systemctl stop crond.service

Кунал
источник
-2

довольно просто, добавьте следующую строку внизу файла crontab через: sudo nano /etc/crontab

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

Martini7
источник
Это не похоже на ответ на вопрос.
Ljm Dullaart