Existe uma maneira de validar o formato do / etc / crontab?

35

Prefiro manter as tarefas agendadas no / etc / crontab para ver rapidamente o que está programado para ser executado, independentemente de qual usuário a tarefa é executada.

O único problema é que o formato não é validado ao salvar, ao contrário do crontab -e - para que um caractere perdido possa interromper silenciosamente todo o cron.

Existe uma maneira de validar o formato / etc / crontab antes / depois do salvamento?

Ben K.
fonte
4
Se, como eu, você veio aqui procurando uma maneira simples (sem script) de dizer se você acertou sua entrada no cron, talvez esteja interessado no cronchecker.net - é um validador on-line para entradas do cron com recursos humanos. saída amigável.
Matt Gibson

Respostas:

17

A única maneira confiável que encontrei é verificar o log.

cronverifica a /etc/crontabcada minuto e registra uma mensagem indicando que o recarregou ou que encontrou um erro.

Então, após a edição, execute o seguinte:

sleep 60; grep crontab /var/log/syslog | tail

Ou, para não esperar um minuto inteiro, mas apenas até o próximo minuto + 5 segundos:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail

Exemplo de saída com um erro:

Jan  9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan  9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Boa saída:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)

Está no Debian 8. Em outros sistemas, o cron pode registrar em um arquivo diferente.

(Eu pensei que poderia evitar procurar o arquivo de log correto usando systemd's journalctl -u cron, mas isso não me mostrou essas entradas de log e, na verdade, parece ter parado de registrar eventos cron 2 dias atrás, por algum motivo)

mivk
fonte
Testado no FreeBSD 10.3. Funciona como um encanto, basta substituir o caminho do log por / var / log / cron
Jette
14

Outra solução mais recente é o script python chkcrontab

Dave Wongillies
fonte
Ainda não verifica os
cronjobs
3

Encontrei esta solução legal aqui: https://crontab.guru

Ele não apenas valida o crontab, mas informa explicitamente o que e quando o crontab será executado e destaca onde estão os erros.

JDS
fonte
0

No Ubuntu, parece que eu posso simplesmente executar:

crontab path/to/crontab/file

NOTA: isso tem o efeito colateral de iniciar este cronjob (obrigado @NZD)

Se o arquivo for inválido, ocorrerá um erro, como:

"crontab":11: bad minute
errors in crontab file, can't install.
conradkdotcom
fonte
1
este comando verifica o arquivo crontab, mas ao mesmo tempo o instala (se não contiver erros). Este é provavelmente um efeito colateral indesejado para o OP.
NZD
Obrigado @NZD, adicionei isso à minha resposta para garantir que o OP esteja ciente disso.
Conradkdotcom
@conradk o comando não inicia o cronjob, sobrescreve o arquivo crontab existente do usuário pelo arquivo fornecido.
MadHatter apoia Monica
Na verdade, isso não funciona para todos os problemas possíveis com o crontab; ele vai pegar alguns problemas gritantes, mas não pega isso, por exemplo: * 4/0 * * /bin/myscript.sh - o 4/0é inválido. mas não é pego por esse método
JDS
@JDS Não é um valor escalonado? Um valor da etapa é 0proibido? unix.stackexchange.com/questions/32027/…
conradkdotcom