Cron.hourly nie będzie działać

54

Ok, więc stworzyłem swój skrypt, upuściłem go, /etc/cron.hourlya następnie chmod 777plik, ale nie uruchomi się (automatycznie). Jeśli uruchomię go ręcznie, działa dobrze. Czy muszę zrobić coś jeszcze?

Switchkick
źródło
Ta odpowiedź nie powinna była otrzymać tylu głosów bez nazwy pliku i treści.
użytkownik nieznany

Odpowiedzi:

13

Dlaczego nie użyć crontab (/ etc / crontab) i użyć * / 1 w polu godziny. Użyłem tego do uruchamiania skryptu co 5 minut i działa dobrze:

# m h dom mon dow user  command
* */1  * * *   user    command
oli206
źródło
6
Używanie cron.dailyi znajomych działa nieco lepiej, jeśli maszyna nie działa przez cały czas, ponieważ anacron próbuje zbliżyć się do właściwego harmonogramu, podczas gdy zwykły cron po prostu nie uruchomi ich, jeśli maszyna nie będzie działać przez całą noc. W przypadku godzinowych prac prawdopodobnie nie ma to większego znaczenia.
poolie
9
Naprawdę doceniam następną odpowiedź, ponieważ dotyczy ona problemu z cron.hourly, zamiast znaleźć obejście.
tishma
4
To nie jest odpowiedź na pytanie
josh123a123
@poolie Jak można zobaczyć na/etc/crontab : cron.daily, cron.weeklyi cron.monthly biegać z anacron (jeśli są dostępne), ale co godzinę run-parts --report /etc/cron.hourly.
Pablo A
144

Wpisy cron.hourlysą uruchamiane przez mechanizm części roboczych ( man run-partswięcej informacji). I run-partsjest wybredny co do nazw plików, które uważa za prawidłowe.

Na przykład nadanie skryptu rozszerzenia spowoduje, że będzie ono nieprawidłowe i spowoduje, że zadanie nie zostanie uruchomione. [a-zA-Z0-9_-]są poprawnymi znakami, więc „.” czyni to nieważnym.

Podczas dodawania zadania do /etc/cron.hourly(lub .daily, .weeklyitp), zawsze przetestować potem, że run-partsfaktycznie go uruchomić za pomocą polecenia:

run-parts --test /etc/cron.hourly

Jeśli uruchomienie tego polecenia pokazuje plik, oznacza to, że zadziałało. W przeciwnym razie, jeśli nic nie pokazuje, nazwa pliku jest nieprawidłowa.

Jak nazywał się twój skrypt?

DaithiF
źródło
Istnieją dwa: cerebro_random_response.sh i Cerebro Temperature.sh nie dobrze?
Switchkick
21
poprawnie, nie dobrze :) [a-zA-Z0-9_-] są poprawnymi znakami, więc „.” czyni to nieważnym. To, co
miałem na
11
oMG, to właśnie uratowało ogromny ból głowy. DZIĘKUJĘ CI! giving your script an extension will make it invalid and result in the job not being run
Jonathan S. Fisher
Możesz także użyć --reportdo faktycznego uruchomienia skryptów.
Pablo A
5

Problem prawdopodobnie wynika z nadmiernie otwartych uprawnień, które pozwalają każdemu edytować plik. Spróbuj 755zamiast tego.

Przejrzenie wpisów cron w danych wyjściowych syslog powinno to potwierdzić.

Cry Havok
źródło
4

Odpowiedź DaithiF powinna być właściwą odpowiedzią.

Poza tym mój skrypt nie miał #!/bin/bashw pierwszym wierszu. Mimo że skrypt można wykonać za pomocą wiersza polecenia, run-partsodrzucił go, mówiąc „Błąd formatu wykonania”.

Zmiana nazwy pliku z scriptname.shcelu scriptnamei dodanie #!/bin/bashw pierwszej linii włączony mój skrypt do uruchomienia co godzinę.

Ben Lin
źródło
-1

Kiedy biegniesz

crontab -l

czy to zadanie jest na liście?

jeśli nie, dodaj go

crontab -e

dodaj tę linię

0 * * * * yourScript

jeśli jest na tej liście, spróbuj dodać ścieżkę języka programowania na górze skryptu

Przykład:

bash: #!/bin/bash

Te 2 rzeczy zawsze rozwiązały moje problemy :)

Wolfy
źródło
Zrobiłem to wszystko, a skrypt jest dobry, działa jak urok. Jest również na liście crontab, ale nie uruchamia się co godzinę. W każdym razie dzięki :(
Switchkick,