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