
Я работаю с кодом, который запускает cron на сервере (который не запускает его во время загрузки). Скрипт, который запускает cron, настраивает некоторые вещи для ведения журнала, а затем просто вызывает cron
. Он не использует /etc/init.d/cron
или service cron start
.
После запуска cron таким образом, service cron status
кажется service cron stop
, что он успешно работает, и указанный в PIDFILE /etc/init.d/cron
присутствует.
Я поместил строку журнала в /etc/init.d/cron
, и похоже, что cron
автономный запуск не вызывает скрипт.
# service cron status
script is running
* cron is running
# service cron stop
script is running
* Stopping periodic command scheduler cron [ OK ]
# cron
#
Что здесь происходит? Это просто потому, что cron
двоичный файл и скрипт /etc/init.d/cron используют одно и то же соглашение о местоположении pid-файла?
решение1
Ваша гипотеза верна:Викси Кронимеет фиксированное расположение pid-файла ( /var/run/crond.pid
), что также предотвращает его повторный запуск.
Theинициализация.dскрипт, который также называется service
использует стандарт /lib/lsb/init-functions
, который сводится к:
- Действие
start
просто вызывает/usr/sbin/cron
(через/sbin/start-stop-daemon
помощника), - Действие
stop
просто отправляетSIGTERM
PID в pidfile (через/sbin/start-stop-daemon
), - Сумма иска
status
составляетkill -0 $(cat /var/run/crond.pid)
.
Однако, если у вас естьсистемдустановлены, стандартные функции init переписаны /lib/lsb/init-functions.d/40-systemd
и работаютхроннапрямую больше не обнаруживается:
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)
ссистемдхотелось бы иметь CGroup
по одному сервису. Что хуже start
и restart
не будет работать, так какхронприведет к сбою в уже существующем pidfile и stop
не уничтожитхронсозданный вами экземпляр.