
저는 서버에서 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 스크립트가 pidfile 위치에 대해 동일한 규칙을 사용하기 때문입니까 ?
답변1
당신의 가설은 정확합니다:빅시 크론고정된 pidfile 위치( /var/run/crond.pid
)가 있어 두 번 실행하는 것도 방지됩니다.
그만큼init.dservice
표준을 사용하여 호출되는 스크립트는 /lib/lsb/init-functions
다음과 같이 요약됩니다.
- 작업 은 (도우미를 통해 )
start
호출만 합니다 ./usr/sbin/cron
/sbin/start-stop-daemon
- 작업 은 pidfile의 PID로
stop
전송됩니다 (를 통해 ).SIGTERM
/sbin/start-stop-daemon
- 그
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
종료되지 않습니다.크론당신이 만든 인스턴스.