O programa crond
foi projetado para ser daemon. Quando começa, uma das primeiras coisas que faz é bifurcar um filho e sair do pai. Isso é projetado para ambientes em que o responsável pela chamada está aguardando a saída do programa antes de prosseguir, enquanto o daemon precisa continuar executando em segundo plano.
caller ---- fork--> wait -------------------------+-> ...
| |
'----> exec crond ---- fork--> exit -'
|
'----> read crontab, wait for time of next job, ...
O PID registrado por start-stop-daemon
é o PID do pai. Se nenhum outro processo se bifurca durante o curto intervalo entre os dois garfos, o PID da criança acaba sendo o PID do pai mais um.
Como start-stop-daemon
é projetado para manipular daemons e permitir que eles sejam executados em segundo plano, informe crond
para ficar em primeiro plano, ou seja, não para bifurcar no começo.
caller ---- fork--> store pid; ...
| |
'----> exec crond -f ----> read crontab, wait for time of next job, ...
Com o crond do BusyBox, passe a opção -f
.
start-stop-daemon -S --quiet --make-pidfile --pidfile /var/run/crond.pid --background --exec /usr/sbin/crond -- -f