Jak wykonać skrypt powłoki poprzez crontab?
Mam skrypt notify.sh, który wygląda jak:
notify-send "hi welcome"
Moje powiadomienie crontab na 2 PM:
0 14 * * * home/hacks/notify.sh
Jednak to nie działa. W czym tkwi problem?
Mam skrypt notify.sh, który wygląda jak:
notify-send "hi welcome"
Moje powiadomienie crontab na 2 PM:
0 14 * * * home/hacks/notify.sh
Jednak to nie działa. W czym tkwi problem?
W twoim skrypcie brakuje linii #! na początku, która jest magią interpretowaną przez jądro, aby powiedzieć, który interpreter poleceń ma być użyty dla skryptu.
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, ponieważ prosisz, aby działo się to tylko raz dziennie, czy strefa czasowa crontabu jest taka sama jak twoja własna strefa czasowa? Może się okazać, że dzieje się to o 14:00 GMT.
Jak uruchomić crontab jest proste tylko . Tutaj zamierzam powiedzieć jak uruchomić zadania crontab. Jest to przydatne dla każdego, kto utknął na crontabie.
*/1 * * * * cd /home/hacks && sh notify.sh
Aby skrypt był wykonywalny, musimy wykonać:
chmod +x home/hacks/notify.sh
Tutaj uruchamiam ten skrypt co jedną minutę … Wykonując poniższy skrypt, możesz zapisać go w pliku dziennika, aby sprawdzić czy działa
zapisz dziennik
*/1 * * * * cd /home/hacks && sh notify.sh>>test.log
wyślij pocztę
*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com
4 hipotezy:
cron daemon nie jest uruchomiony (zrób ps axfww | grep cron i sprawdź)
notify-send próbuje wysłać wyjście do terminala lub sesji X - ale jest uruchamiany z poziomu środowiska cron i nie wie “z kim rozmawiać”, że tak powiem.
twój skrypt nie jest wykonywalny
ścieżka home/ w skrypcie crontab jest względna do użytkownika, jako który skrypt jest wykonywany. Spróbuj użyć pełnej ścieżki
Po pierwsze, musimy edytować crontab z komendą crontab -e a następnie wewnątrz tej Crontab dodać ścieżkę do skryptu wykonywalnego i w naszym przypadku tak * 14 * * * home/hacks/notify.sh >/dev/null 2>&1 .
Start /Stop / restart usługi cron
/etc/init.d/crond start /stop / restart service crond start /stop /restart systemctl stop crond.service systemctl stop crond.service