Wstawiłem skrypt wykonywalny /etc/cron.hourly
, ale ten skrypt nie działał co godzinę, w rzeczywistości nigdy nie działał.
Oto skrypt, który stworzyłem: Hour-sound:
#! / bin / bash mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null & spd-say -r -50 -p 50 -t male3 „Czas jest teraz $ (data +„% l% p ”)” powiadom-wyślij „It's:” „$ (data +„% l% p ”) teraz.” -i ~ / Pictures / "first tee.png" -t 5000
Mój crontab to:
DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /home/naruto/Hour-sound.sh
Chociaż polecenia mplayer
i spd-say
są uruchamiane poprawnie, notify-send
nie jest. Próbowałem także przekierować błąd do pliku:
0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
Ale to nie pokazało żadnych wyników. Co ja robię źle?
/etc/crontab
marun-parts
wiersz do uruchamiania godzinnychcron
zadań z katalogu?/etc/crontab
plik ma linię17 * * * * root cd / && run-parts --report /etc/cron.hourly
?Odpowiedzi:
Jak zapewne widzieliście w komentarzach do pytania, cronjobs w
/etc/cron.hourly
(i innych podobnych katalogach) są wykonywane przezrun-parts
.run-parts
jest trochę wybredna w kwestii nazw plików. Domyślnie nie wykonuje plików, których nazwy plików zawierają cokolwiek innego niż (wszystkie z ASCII)Jeśli więc skrypt ma nazwę pliku na przykład „myscript.sh”, jest po prostu ignorowany, ponieważ
run-parts
nie lubi kropki.źródło
/etc/cron.hourly
nie muszą być wykonywane „o godzinie”? Jeśli twój cronjob/etc/crontab
ma 17 w pozycji minut, skrypty są wykonywane o 00:17, 01:17 i tak dalej. I znowu na wszelki wypadek, uprawnienia skryptu pozwalają użytkownikowi root na ich wykonanie?/etc/cron.d/
nie mogą mieć uprawnień do zapisu ani wykonywania dla „grupy” lub „innych”. „właściciel” musi mieć uprawnienia do wykonywania, „grupa” i „inni” muszą mieć tylko uprawnienia do odczytu. Może to dotyczy/etc/cron.hourly
również, choć tego nie testowałem.Jednym z problemów jest to, że próbujesz uruchomić aplikację graficzną (
notify-send
) z crona. To wymaga drobnych poprawek. Musisz ustawićXAUTHORITY
iDISPLAY
zmienne w crontab, aby mógł połączyć się z twoją uruchomioną sesją X i musisz ustawić,XDG_RUNTIME_DIR
aby mógł połączyć się z twoją sesją pulseaudio. Niestety, muszą być ustawione w samym crontabie, więc nie możesz ich używać/etc/cron.hourly
. Zamiast tego uruchomcrontab -e
i dodaj te linie:Zmień wartość
XDG_RUNTIME_DIR
na cokolwiek, co zostanie zwrócone, gdy będzieszecho
je z terminalu. W moim systemie jest to:Prawdopodobnie będzie taki sam na twoim, ale najpierw sprawdź. Teraz twój skrypt będzie działał co godzinę i powinien działać zgodnie z oczekiwaniami.
źródło
notify-send
wymaga ustawieniaXAUTHORITY
iDISPLAY
zmiennych oraz ii)mplayer
wymagaXDG_RUNTIME_DIR
ustawienia. Wypróbowałeś moją sugestię? To powinno rozwiązać oba problemy. Prawdopodobnie miałeś również problemy z nazywaniem, ponieważrun-parts
wyjaśniono to w innej odpowiedzi./etc/crontab
, nie rób tego. Chcesz, aby działało to jako użytkownik, a nie jako root, a ten plik i tak ma inny format. Po prostu zrób to, co powiedziałem w mojej odpowiedzi, uruchomcrontab -e
i dodaj tam wiersze.Skrypt kończący się na
.sh
nie jest wykonywany w/etc/cron.hourly
folderze:zmień nazwę skryptu
lub wstaw wywołanie skryptu do
co pozwala na
.sh
zakończenieźródło
Nie używaj skryptu z rozszerzeniem (abc.sh) i dodaj swoje potrzebne miejsce. (cron.hours).
dodaj swój kod do pliku abc i zapisz. (w razie potrzeby) (powinno to być polecenie bash)
posługiwać się
polecenie, aby utworzyć plik wykonywalny.
istnieje kilka predefiniowanych linii. edytuj od linii minut do godzin i zapisz go.
wtedy będzie działać poprawnie.
źródło