Ambiente diferente
Cron passa um conjunto mínimo de variáveis de ambiente para seus trabalhos. Para ver a diferença, adicione um trabalho falso assim:
* * * * * env > /tmp/env.output
Espere que /tmp/env.output seja criado e remova o trabalho novamente. Agora compare o conteúdo de /tmp/env.output com a saída de env em seu terminal normal.
Uma "pegadinha" comum é a variável de ambiente PATH sendo diferente. Talvez seu script do cron use o comando somecommand encontrado em /opt/someApp/bin , que você adicionou a PATH in /etc/environment ? O cron ignora PATH desse arquivo, então runnning somecommand do seu script falhará quando executado com o cron, mas funciona quando executado em um terminal. Vale a pena notar que as variáveis de /etc/environment serão passadas para tarefas agendadas, mas não as variáveis que o cron define especificamente, como PATH .
Para contornar isso, basta definir sua própria variável PATH na parte superior do script. Por exemplo,
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# rest of script follows
Alguns preferem apenas usar caminhos absolutos para todos os comandos. Eu recomendo contra isso. Considere o que acontece se você deseja executar seu script em um sistema diferente e, nesse sistema, o comando está em /opt/someAppv2.2/bin . Você teria que percorrer todo o script substituindo /opt/someApp/bin por /opt/someAppv2.2/bin em vez de apenas fazer uma pequena edição na primeira linha do script.
Você também pode definir a variável PATH no arquivo crontab, que será aplicada a todas as tarefas do cron. Por exemplo,
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
15 1 * * * backupscript --incremental /home /root