start-stop-daemon이 cron pidfile의 pid를 잘못 만듭니다.

start-stop-daemon이 cron pidfile의 pid를 잘못 만듭니다.

start()에 대해 다음을 지정하는 crond를 시작하는 init.d 스크립트가 있습니다.

start-stop-daemon -S --quiet --make-pidfile --pidfile /var/run/crond.pid --background --exec /usr/sbin/crond

그러나 PID는언제나/var/run/crond.pid에 기록된 숫자보다 한 숫자 더 높습니다. 여기서 무슨 일이 일어나고 있는지 아는 사람 있나요? 동일한 호출을 수행하는 약 10개의 다른 init.d 스크립트가 있는데 cron.d에만 이 문제가 있습니다.

편집하다: 흥미 롭군:

# /usr/sbin/crond &
#
[1]+  Done                       /usr/sbin/crond
# echo $!
737
# ps -eaf | grep crond
738 root     /usr/sbin/crond
740 root     grep crond
#

답변1

crond프로그램은 데몬으로 설계되었습니다. 시작되면 가장 먼저 하는 일은 하위 프로세스를 분기하고 상위 프로세스를 종료하는 것입니다. 이는 호출자가 계속하기 전에 프로그램이 종료될 때까지 기다리고 데몬이 백그라운드에서 계속 실행되어야 하는 환경을 위해 설계되었습니다.

caller ---- fork--> wait -------------------------+-> ...
             |                                    |
             '----> exec crond ---- fork--> exit -'
                                     |
                                     '----> read crontab, wait for time of next job, ...

기록된 PID는 start-stop-daemon상위 프로세스의 PID입니다. 분기 사이의 짧은 시간 내에 다른 프로세스가 분기되지 않으면 하위 프로세스의 PID는 결국 상위 프로세스의 PID에 1을 더한 값이 됩니다.

start-stop-daemon디자인은 데몬을 처리하고 백그라운드에서 실행하도록 하는 것이므로 포 crond그라운드에 머물도록 지시합니다. 즉, 처음에 포크하지 마십시오.

caller ---- fork--> store pid; ...
             |                                    |
             '----> exec crond -f ----> read crontab, wait for time of next job, ...

BusyBox의 crond를 사용하여 -f옵션을 전달하세요.

start-stop-daemon -S --quiet --make-pidfile --pidfile /var/run/crond.pid --background --exec /usr/sbin/crond -- -f

관련 정보