
Estoy trabajando con un código que activa cron en un servidor (que no lo tiene ejecutándose en el momento del arranque). El script que inicia cron configura algunas cosas de registro y luego simplemente invoca cron
. No usa /etc/init.d/cron
o service cron start
.
Después de iniciar cron de esta manera, service cron status
parece service cron stop
que puedo trabajar felizmente y el PIDFILE especificado en /etc/init.d/cron
está presente.
Puse una línea de registro /etc/init.d/cron
y parece que la ejecución cron
independiente no invoca el script.
# service cron status
script is running
* cron is running
# service cron stop
script is running
* Stopping periodic command scheduler cron [ OK ]
# cron
#
¿Que está pasando aqui? ¿Esto se debe simplemente a que el cron
binario y el script /etc/init.d/cron usan la misma convención para la ubicación del archivo pid?
Respuesta1
Tu hipótesis es correcta:Vixie Crontiene una ubicación fija de archivo pid ( /var/run/crond.pid
), lo que también impide ejecutarlo dos veces.
Elinicio.dscript, que también se llama service
usando el estándar /lib/lsb/init-functions
, que resume:
- La
start
acción simplemente llama/usr/sbin/cron
(a través del/sbin/start-stop-daemon
ayudante), - La
stop
acción simplemente envíaSIGTERM
al PID en el archivo pid (a través de/sbin/start-stop-daemon
), - La
status
acción asciende akill -0 $(cat /var/run/crond.pid)
.
Sin embargo, si tienessistemadinstalado, las funciones de inicio estándar se reescriben en/lib/lsb/init-functions.d/40-systemd
y se ejecutancrondirectamente ya no se detecta:
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)
desdesistemadMe gustaría tener un CGroup
por servicio. ¿Qué es peor start
y restart
no funcionará, ya quecronfallará en el archivo pid ya existente y stop
no eliminará elcroninstancia que creaste.