Имеет ли запуск cron сам по себе такое же поведение, как и через скрипт init.d?

Имеет ли запуск cron сам по себе такое же поведение, как и через скрипт init.d?

Я работаю с кодом, который запускает 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, который сводится к:

  1. Действие startпросто вызывает /usr/sbin/cron(через /sbin/start-stop-daemonпомощника),
  2. Действие stopпросто отправляет SIGTERMPID в pidfile (через /sbin/start-stop-daemon),
  3. Сумма иска 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не уничтожитхронсозданный вами экземпляр.

Связанный контент