Dlaczego umieszczanie skryptu w /etc/cron.hourly nie działa?


16

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 mplayeri spd-saysą uruchamiane poprawnie, notify-sendnie 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?


upewniając się, czy wykonałeś skrypt? własnością root? co się stanie, gdy uruchomisz skrypt z terminala lub umieścisz tam prosty skrypt? czy /etc/crontabma run-partswiersz do uruchamiania godzinnych cronzadań z katalogu?
heemayl

Plik wykonywalny: tak, uruchomienie skryptu nie idzie dobrze nic z katalogu /etc/cron.hourly, nie wiesz jak to sprawdzić? Czy to w aplikacjach startowych? @heemayl
Black Block

1
Czy /etc/crontabplik ma linię 17 * * * * root cd / && run-parts --report /etc/cron.hourly?
heemayl


1
Proszę nie zamieszczać screeny z tekstem . Zwłaszcza, gdy ten tekst jest wyświetlany w przezroczystym oknie terminala i zawiera rozpraszające kolory.
terdon

Odpowiedzi:


24

Jak zapewne widzieliście w komentarzach do pytania, cronjobs w /etc/cron.hourly(i innych podobnych katalogach) są wykonywane przez run-parts. run-partsjest 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)

  • wielkie litery
  • małe litery
  • cyfry
  • podkreśla
  • myślniki („znaki minus”)

Jeśli więc skrypt ma nazwę pliku na przykład „myscript.sh”, jest po prostu ignorowany, ponieważ run-partsnie lubi kropki.


1- Oto moje pliki: mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- Czy wypróbowałeś jakiś skrypt w /etc/cron.hourly i pracowałeś z tobą?
Czarny blok

2
Właśnie przetestowałem mały skrypt, który właśnie napisał „Hello” do pliku w / tmp, i działał bez problemu. Na wszelki wypadek zdajesz sobie sprawę, że skrypty /etc/cron.hourlynie muszą być wykonywane „o godzinie”? Jeśli twój cronjob /etc/crontabma 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?
Henning Kockerbeck

Tak, ale ten mój skrypt nigdy nie działa. i informacje na temat uprawnień patrz tutaj: mediafire.com/view/psnb4bflawdlyly/…
Black Block

Może to właściwie problem z pozwoleniem. Wiem, że bardziej ogólnie skrypty /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.hourlyrównież, choć tego nie testowałem.
Henning Kockerbeck,

Ok, potem zmieniłem uprawnienia do mojego pliku mediafire.com/view/s2lq63u7z54ohbo/…, który sprawia, że ​​grupa, która jest grupą główną, jest tylko do odczytu i inne, więc czy to spowoduje jakieś problemy?
Czarny blok

5

Jednym z problemów jest to, że próbujesz uruchomić aplikację graficzną ( notify-send) z crona. To wymaga drobnych poprawek. Musisz ustawić XAUTHORITYi DISPLAYzmienne w crontab, aby mógł połączyć się z twoją uruchomioną sesją X i musisz ustawić, XDG_RUNTIME_DIRaby 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 uruchom crontab -ei dodaj te linie:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

Zmień wartość XDG_RUNTIME_DIRna cokolwiek, co zostanie zwrócone, gdy będziesz echoje z terminalu. W moim systemie jest to:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

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.


Czy to masz na myśli mediafire.com/view/ucjpvu8b41n3hue/… . to nie działało dla mnie.
Czarny blok

Myślę, że jeśli problem polegał na wysyłaniu powiadomienia, to dlaczego inne polecenie również nie działało (np. Mplayer)?
Czarny blok

@BlackBlock występuje wiele problemów. i) notify-sendwymaga ustawienia XAUTHORITYi DISPLAYzmiennych oraz ii) mplayerwymaga XDG_RUNTIME_DIRustawienia. Wypróbowałeś moją sugestię? To powinno rozwiązać oba problemy. Prawdopodobnie miałeś również problemy z nazywaniem, ponieważ run-partswyjaśniono to w innej odpowiedzi.
terdon

Więc dlaczego to mi nie zadziałało? oszaleję! zobacz moje zdjęcie w 1 komentarzu do twojej odpowiedzi
Czarny Blok

@BlackBlock nie! Edytujesz /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, uruchom crontab -ei dodaj tam wiersze.
terdon

3

Skrypt kończący się na .shnie jest wykonywany w /etc/cron.hourlyfolderze:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
Odnośniki lub pliki binarne w katalogu obsługiwanym przez run-pars (jak /etc/cron.daily) nie będą działać, jeśli kropka jest częścią ich imię.

zmień nazwę skryptu

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

lub wstaw wywołanie skryptu do

/etc/crontab

co pozwala na .shzakończenie


1

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ę

sudo chmod +x abc

polecenie, aby utworzyć plik wykonywalny.

edit etc/cronrtab file

istnieje kilka predefiniowanych linii. edytuj od linii minut do godzin i zapisz go.

wtedy będzie działać poprawnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.