Jeg opprettet et skript som vil legge til en cron-jobb basert på brukerspesifikasjoner, men den vil ikke fungere siden jeg trenger å oppdatere cron hver gang Jeg legger til en jobb i crontab. Er det en måte å oppdatere cron uten å drepe prosessen?
Svar
Så lenge din skript bruker crontab
for å legge til og slette jobbspesifikasjoner for brukeren, det vil ikke være behov for å starte cron
-demonen.
AIX 7.1 cron manuell side sier :
Når du gjør endringer til crontab-filene ved hjelp av
crontab
-kommandoen, blir en melding som indikerer endringen sendt til cron-demonen.
Se også crontab
manualen .
Den generelle handlingsstrømmen som skriptet ditt ville ha ta:
- Få brukerens crontab til en tekstfil ved hjelp av
crontab -l >crontab.txt
. - Manipuler tekstfilen ved å legge til, fjerne eller endre jobbspesifikasjoner.
- Last brukerens crontab med de nye spesifikasjonene ved hjelp av
crontab crontab.txt
.
Kommandoene i første og siste trinn må utføres som bruker (det første trinnet kan også kjøres som crontab -l username >crontab.txt
som f.eks root).
Dette fungerer på enhver Unix som bruker cron
.
Kommentarer
Svar
AIX 7.1 cron manuell side sier :
The cron-demon leser konfigurasjonsfilen når den er aktivert og når den mottar hangup-signalet.
Så bare kill -HUP cron_pid
burde gjøre det.
Kommentarer
- Jeg har allerede prøvd dette, men jeg vil oppdatere konfigurasjonen min uten å drepe prosessen
- @Shan
kill
-kommandoen sender signaler til prosessen. Generelt kan prosesser drepes, dvs. de dør faktisk ved å motta et signal. Men i tilfellecron
behandler den signalet, dør ikke og leser konfigurasjonen på nytt. - Delen av mannssiden du siterte er refererer til cron ' s konfigurasjonsfil ,
/etc/cronlog.conf
, ikke selve crontab-filene. - Jeg kan ikke gjøre dette til et svar på dette spørsmålet; når jeg manuelt redigerer en crontab-fil og HUP cron, blir den nye cron-jobben ikke utført.
- @JeffSchaller er riktig, du må enten drepe -9 cron_pid eller bruke crontab på en crontab-fil som foreslått av Kusalananda i det andre svaret for å laste ned crontab.
crontab -l
.