A sintaxe da tarefa cron é restrita a sh
, portanto você não pode usar os Bashisms como ~
. Felizmente, a correção é fácil - basta substituí-la por $HOME
. Da mesma forma, source
precisa ser substituído por .
(apenas um ponto).
É claro que os scripts que você fonte não deve usar a sintaxe Bash, se você pretende usá-los a partir de sh
. Provavelmente, a correção mais fácil é migrar essas coisas para o script (ou criar um script de wrapper para o Cron ser executado).
Como dentro do seu script, você pode usar bash
, se desejar, desde que a linha shebang esteja corretamente #!/bin/bash
(ajuste o caminho se for necessário) em vez de #!/bin/sh
.
Se você não gostar disso, por algum motivo, poderá inserir o Bash no arquivo crontab
, especificando-o explicitamente:
* * * * * bash -c 'source ~/.bash_profile; source ~/.bashrc; ./myscript.sh'
Você deve conseguir ver source: command not found
e export: command not found
nos e-mails enviados por cron
quando as coisas dão errado. Examinar a saída do erro é realmente importante para a solução de problemas.
Claro, se você tiver o padrão .bashrc
no Ubuntu, ele será liberado imediatamente se você tentar obtê-lo a partir de um script não interativo. Talvez seja melhor colocar as configurações que você deseja em um uso não interativo em outro arquivo (talvez .profile
, que será lido por sh
por padrão)?