Utworzyłem skrypt, który doda zadanie crona na podstawie specyfikacji użytkownika, ale nie działa, ponieważ muszę odświeżyć crona za każdym razem Dołączam zadanie w crontab. Czy istnieje sposób na odświeżenie crona bez przerywania procesu?
Odpowiedź
Dopóki skrypt używa crontab
do dodawania i usuwania specyfikacji zadań dla użytkownika, nie ma potrzeby ponownego uruchamiania demona cron
.
Strona podręcznika Cron AIX 7.1 mówi :
Kiedy wprowadzasz zmiany do plików crontab za pomocą polecenia
crontab
, wiadomość informująca o zmianie jest wysyłana do demona cron.
Zobacz także crontab
instrukcję .
Ogólny przepływ działań, które Twój skrypt take:
- Pobierz tabelę crontab użytkownika do pliku tekstowego za pomocą
crontab -l >crontab.txt
. - Manipuluj plikiem tekstowym, dodając, usuwając lub zmieniając specyfikacje zadań.
- Załaduj tabelę crontab użytkownika z nowymi specyfikacjami za pomocą
crontab crontab.txt
.
Polecenia w pierwszym i ostatnim kroku muszą być wykonane jako użytkownik (pierwszy krok może być również wykonany jako crontab -l username >crontab.txt
jak np root).
To działałoby na każdym Uniksie używającym cron
.
Komentarze
Odpowiedź
AIX 7.1 Strona podręcznika cron mówi :
Demon cron czyta plik konfiguracyjny, gdy jest aktywowany i kiedy otrzymuje sygnał rozłączenia.
Więc po prostu kill -HUP cron_pid
powinienem to zrobić.
Komentarze
- Próbowałem już tego, ale chciałbym odświeżyć konfigurację bez przerywania procesu.
- @Shan Polecenie
kill
wysyła sygnały do procesu. Ogólnie rzecz biorąc, procesy można zabić, tj. Faktycznie umrzeć, po otrzymaniu sygnału. Ale w przypadku procesucron
obsługuje on sygnał, nie umiera i ponownie odczytuje swoją konfigurację. - Część strony podręcznika, którą zacytowałeś, to odnosząc się do cron ' s pliku konfiguracyjnego ,
/etc/cronlog.conf
, a nie do samych plików crontab. - Nie mogę przekształcić tego w odpowiedź na to pytanie; kiedy ręcznie edytuję plik crontab i cron HUP, nowe zadanie crona nie jest wykonywane.
- @JeffSchaller jest poprawne, musisz albo zabić -9 cron_pid, albo użyć crontab na pliku crontab, zgodnie z sugestią Kusalanandy w drugiej odpowiedzi, aby przeładować crontab.
crontab -l
.