O cron reagendamento parece não ser levado em conta a menos que ocorra reinicialização?

0

Eu li várias postagens no SE.com sobre cronjobs, crontab e como reagendar tarefas do cron. Mas parece que, no meu ambiente Debian, uma agenda de tarefas de limpeza de sessão simplesmente chamada "php", que está presente em /etc/cron.d, especificando raiz como usuário, e atualmente rodando a cada 30 minutos, não pode ser reprogramado, a menos que ocorra uma reinicialização .

cat /etc/cron.d/php

retorna:

9,39 8-20     * * *     root   [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean 2>>/dev/null; fi

Quaisquer mudanças de hora / minuto eu não serão levadas em consideração, apesar do /etc/init.d/cron reiniciar. Ele está em um servidor de produção, portanto, o host não pode ser reiniciado facilmente ou como um experimento.

Existe algum comando que eu possa emitir para dizer ao crond para levar em conta qualquer reprogramação?

    
por Fabien Haddadi 17.04.2018 / 11:47

1 resposta

3

Bem vindo ao Debian; você não usa mais o cron.

M. Kitt está certo ao dizer que o Stack Exchange prefere uma pergunta por questão, mas neste caso ambas as questões derivam de um erro fundamental que você está cometendo: Você está erroneamente assumindo que está executando tarefas cronicas.

Como você pode ver na descrição do trabalho do cron que está à sua frente, seus trabalhos cron estão se desativando porque eles vêem o systemd rodando em seu sistema:

… && if [ ! -d /run/systemd/system ]; then … ; fi

/etc/cron.d/php não é não oficial, a propósito. Ele é instalado pelo pacote Debian-php-common . Também instalados a partir desse mesmo pacote, estão as coisas que rodam ao invés de aquele trabalho do cron:

Este é um padrão que pode ser encontrado em um número cada vez maior de tais pacotes Debian atualmente: os cron jobs são suplantados pelas unidades systemd e auto-desabilitados quando (somente) o systemd está rodando.

Portanto, ajustar o agendamento na tabela cron não conseguirá nada (além de alterar quando um comando shell que não faz nada está agendado). Da mesma forma, definir variáveis de ambiente na tabela cron não conseguirá nada. Você precisa alterar o agendamento na unidade temporizada e alterar as variáveis de ambiente na unidade de serviço.

Os detalhes disso estão além do escopo desta resposta, mas muito rapidamente você precisa aprender sobre unidades systemd, arquivos de substituição de unidade e os comandos systemctl cat , systemctl status e systemctl edit .

Leitura adicional

por 17.04.2018 / 21:57