A principal diferença entre a execução de um cron job na linha de comando e dentro do cron é seu ambiente. Outras possíveis diferenças incluem o diretório atual, a disponibilidade de um terminal e qual shell é usado.
Esta é uma simulação bastante precisa da execução de um cron job via cron. Para evitar diferenças devido ao shell, coloque seu trabalho em um script e coloque apenas o caminho para esse script no crontab. Observe que o conjunto e os valores exatos das variáveis de ambiente transmitidas pelo cron dependem da implementação; verifique a página crontab(5)
man no seu sistema. ifne
é um comando que executa o comando especificado em argumentos se receber alguma entrada; há um em moreutils .
env -i HOME="$HOME" LOGNAME="$LOGNAME" PATH=/usr/bin:/bin SHELL=/bin/sh USER="$USER" \
/path/to/script </dev/null 2>&1 |
ifne mail -r "Cron Daemon" -s "Cron <$USER@$(hostname)> /path/to/script" "$USER"
Outra maneira de criar uma configuração do tipo cron é através de at
. Mas at
cuida de executar o comando com as variáveis de ambiente que o processo at
recebeu, portanto, você ainda precisa emular essa parte.
echo /path/to/script |
env -i HOME="$HOME" LOGNAME="$LOGNAME" PATH=/usr/bin:/bin SHELL=/bin/sh USER="$USER" \
at now