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


22

Я маю notify.sh сценарій, який виглядає так:

notify-send "hi welcome"

Моє повідомлення crontab для 2 вечора:

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

Однак це не працює. В чому проблема?

Відповіді:


38

У вашому сценарії відсутній номер #! на початку, що є магією, інтерпретованою ядром, щоб сказати, який інтерпретатор команд буде використовуватися для сценарію.

Зробіть це так:

#!/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 таким же, як ваш власний часовий пояс? Можливо, це відбудеться о 14:00 GMT.


+1 Ця відповідь є приголомшливою - особливо відзначаючи, що сценарій потребує виконання! Дякую!
FXQuantTrader

Дуже тонке пояснення. Мій голос
Fokwa Best

18

Зробити кронтаб працює просто. Тут я хочу сказати, як запустити роботу 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 не запущено (виконайте команду a ps axfww | grep cron і перевірити)

  • сповіщення-відправка намагається надіслати вивід терміналу, або сеанс X, але воно виконується зсередини cron навколишнього середовища і він не знає "кому розмовляти", так би мовити.

  • Ваш сценарій не виконується

  • home/ Шлях у скрипті crontab відносно користувача, який виконується скриптами. Спробуйте використати повний шлях


1

Додати export DISPLAY=:0 над рядком сповіщень-надсилання у вашому сценарії. Це стосується другого пункту лорнезога.


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 ранку та 3 ранку за 10 хвилин через кожний понеділок, середу та п'ятницю.


0

Перш за все, нам потрібно редагувати crontab за допомогою Command crontab -e і ніж усередині цього Crontab додайте шлях до виконуваного сценарію та у вашому випадку так * 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 зупинити crond.service


-2

досить простий, додайте наступний рядок у нижній частині файлу crontab: sudo nano /etc/crontab

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


Це, здається, не є відповіддю на це питання.
Ljm Dullaart
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.