cron 자체를 실행하는 것은 init.d 스크립트를 통한 것과 동일한 동작을 합니까?

cron 자체를 실행하는 것은 init.d 스크립트를 통한 것과 동일한 동작을 합니까?

저는 서버에서 cron을 실행하는 일부 코드를 작업하고 있습니다(부팅 시 실행되지 않음). cron을 시작하는 스크립트는 일부 로깅 항목을 설정한 다음 간단히 cron. /etc/init.d/cron또는 를 사용하지 않습니다 service cron start.

이런 식으로 cron을 시작한 후에 service cron statusservice 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 스크립트가 pidfile 위치에 대해 동일한 규칙을 사용하기 때문입니까 ?

답변1

당신의 가설은 정확합니다:빅시 크론고정된 pidfile 위치( /var/run/crond.pid)가 있어 두 번 실행하는 것도 방지됩니다.

그만큼init.dservice표준을 사용하여 호출되는 스크립트는 /lib/lsb/init-functions다음과 같이 요약됩니다.

  1. 작업 은 (도우미를 통해 ) start호출만 합니다 ./usr/sbin/cron/sbin/start-stop-daemon
  2. 작업 은 pidfile의 PID로 stop전송됩니다 (를 통해 ).SIGTERM/sbin/start-stop-daemon
  3. status행동은 kill -0 $(cat /var/run/crond.pid).

그러나 다음과 같은 경우체계화된설치되면 표준 초기화 기능이 다시 작성되어 /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종료되지 않습니다.크론당신이 만든 인스턴스.

관련 정보