Como superusuário, crontab -e
adiciono uma linha para gerar um cronsh.sh
arquivo como este:
0 0 * * * source /home/myname/cronsh.sh
O conteúdo do cronsh.sh
arquivo é esta linha:
date >> /home/myname/cronlog.txt
No entanto, quando verifico o cronlog.txt
arquivo no dia seguinte, ele está vazio. O que estou fazendo de errado?
Agradeço antecipadamente
CRON usa
sh
como shell padrão esource
é um comando interno do shell Bash, portanto não é reconhecido em tudo o quesh
está vinculado a outro que não seja o Bash, o que não é o caso do shell do sistema (geralmente Dash por padrão) ... Por outro lado, o equivalente a for osource
comando.
deve funcionar aí... Veja demonstração abaixo:então tente mudar
source
para.
... O mesmo se aplica ao conteúdo de/home/myname/cronsh.sh
também. Portanto, verifique se sua sintaxe é amigável ao Dash ou, alternativamente, diga ao CRON para usar o Bash comSHELL=/bin/bash
set antes do seu cronjob no arquivo crontab, assim:Vale a pena mencionar que geralmente você não precisa obter um script Bash para executá-lo ( a menos que você queira deliberadamente que ele seja executado no shell de chamada atual e não em um sub-shell ), mas uma maneira mais preferida é invocar o Bash próprio intérprete e forneça o arquivo de script como um argumento assim:
... que também deve funcionar se você adicionar um shebang ao seu script especificando o intérprete correto para invocar, ou seja,
#!/bin/bash
e então invocar o script como um executável depois de conceder permissões de execução, é claro, assim:... e isso deve evitar que você precise aplicar as outras sugestões mencionadas acima.