A execução do cron por si só tem o mesmo comportamento do script init.d?

A execução do cron por si só tem o mesmo comportamento do script init.d?

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/cronou service cron start.

Depois de iniciar o cron desta forma, service cron statusparece service cron stopque ele pode funcionar perfeitamente e o PIDFILE especificado /etc/init.d/cronestá presente.

Coloquei uma linha de log /etc/init.d/crone parece que a execução cronautô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 cronbiná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 serviceusa o padrão /lib/lsb/init-functions, que soma:

  1. A startação apenas chama /usr/sbin/cron(através do /sbin/start-stop-daemonauxiliar),
  2. A stopação apenas envia SIGTERMpara o PID no pidfile (através de /sbin/start-stop-daemon),
  3. A statusação equivale a kill -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-systemde 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 CGrouppor serviço. O que é pior starte restartnão vai funcionar, já quecronfalhará no pidfile já existente e stopnão matará ocroninstância que você criou.

informação relacionada