
Estou trabalhando com um código que aciona o cron em um servidor (que não está em execução no momento da inicialização). O script que inicia o cron configura algumas coisas de registro e simplesmente invoca o cron
. Não usa /etc/init.d/cron
ou service cron start
.
Depois de iniciar o cron desta forma, service cron status
parece service cron stop
que ele pode funcionar perfeitamente e o PIDFILE especificado /etc/init.d/cron
está presente.
Coloquei uma linha de log /etc/init.d/cron
e parece que a execução cron
autônoma não invoca o script.
# service cron status
script is running
* cron is running
# service cron stop
script is running
* Stopping periodic command scheduler cron [ OK ]
# cron
#
O que está acontecendo aqui? Isso ocorre simplesmente porque o cron
binário e o script /etc/init.d/cron usam a mesma convenção para a localização do arquivo pid?
Responder1
Sua hipótese está correta:Vixie Crontem uma localização fixa do pidfile ( /var/run/crond.pid
), o que também evita executá-lo duas vezes.
Oiniciar.dscript, que também é chamado por service
usa o padrão /lib/lsb/init-functions
, que soma:
- A
start
ação apenas chama/usr/sbin/cron
(através do/sbin/start-stop-daemon
auxiliar), - A
stop
ação apenas enviaSIGTERM
para o PID no pidfile (através de/sbin/start-stop-daemon
), - A
status
ação equivale akill -0 $(cat /var/run/crond.pid)
.
No entanto, se você tiversistemainstalado, as funções init padrão são reescritas /lib/lsb/init-functions.d/40-systemd
e executadascrondiretamente não é mais detectado:
piotr@bialykiel:~$ sudo /usr/sbin/cron
piotr@bialykiel:~$ sudo /etc/init.d/cron status
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sun 2020-02-02 09:12:43 CET; 5min ago
Docs: man:cron(8)
Process: 734 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=TERM)
Main PID: 734 (code=killed, signal=TERM)
desdesistemagostaria de ter um CGroup
por serviço. O que é pior start
e restart
não vai funcionar, já quecronfalhará no pidfile já existente e stop
não matará ocroninstância que você criou.