Jak wykonać skrypt powłoki za pomocą crontab?

22

Mam notify.shskrypt, który wygląda następująco:

notify-send "hi welcome"

Moje powiadomienie o crontabie o 14.00:

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

To jednak nie działa. Jaki jest problem?

Aravind
źródło

Odpowiedzi:

39

W twoim skrypcie brakuje #! linia na początku, czyli magia interpretowana przez jądro, która mówi, który interpreter poleceń ma zostać użyty w skrypcie.

Niech to wygląda tak:

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

i upewnij się, że skrypt jest wykonywalny:

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

Ponadto, skoro pytasz, aby zdarzyło się to tylko raz dziennie, to czy strefa czasowa crontab jest taka sama jak twoja własna strefa czasowa? Może się tak zdarzyć o 14.00 GMT.

Phil P.
źródło
+1 Ta odpowiedź jest niesamowita - szczególnie biorąc pod uwagę, że skrypt musi być wykonywalny! Dzięki!
FXQuantTrader
Bardzo subtelne wyjaśnienie. Moja opinia
Fokwa Best
18

Uruchamianie crontab jest łatwe. Tutaj powiem, jak uruchomić zadania crontab. Jest przydatny dla każdego, kto utknął na crontab.

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

Aby skrypt był wykonywalny, musimy:

chmod +x home/hacks/notify.sh

Tutaj uruchamiam ten skrypt na każdą minutę ... Wykonując poniższy skrypt, możesz zapisać go w pliku dziennika, aby sprawdzić, czy działa

napisz dziennik

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

Wyślij maila

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" [email protected]
Aravind
źródło
2
czyż nie będzie działać „* / 1 * * * * sh /home/hacks/notify.sh”?
user1179459,
5

4 hipoteza:

  • demon cron nie działa (zrób ps axfww | grep croni sprawdź)

  • powiadomienie-wysyłanie próbuje wysłać dane wyjściowe do terminala lub sesji X - ale jest uruchamiane z poziomu cronśrodowiska i nie wie „z kim rozmawiać”, że tak powiem.

  • twój skrypt nie jest wykonywalny

  • home/ścieżka w crontab skrypt jest w stosunku do użytkownika skrypty zostanie wykonany jako. Spróbuj użyć pełnej ścieżki

lorenzog
źródło
1

Dodaj export DISPLAY=:0powyżej skryptu powiadomienia-wyślij. To dotyczy drugiego punktu Lornezoga.

W_Whalley
źródło
0

Musisz otworzyć crontab za pomocą następującego polecenia:

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

Spowoduje to uruchomienie skryptu raz na godzinę od 8:00 do 15:00 o 10 minut po godzinie w każdy poniedziałek, środę i piątek.

Gafel
źródło
0

Przede wszystkim musimy edytować plik crontab za pomocą polecenia, crontab -ea następnie w środku Crontabdodać ścieżkę skryptu wykonywalnego, aw twoim przypadku w ten sposób * 14 * * * home/hacks/notify.sh >/dev/null 2>&1.

Uruchom / zatrzymaj / uruchom ponownie usługę cron

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

systemctl stop crond.service

kunal
źródło
-2

całkiem proste, dodaj następujący wiersz na dole pliku crontab przez: sudo nano /etc/crontab

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

Martini7
źródło
To nie wydaje się być odpowiedzią na pytanie.
Ljm Dullaart