script bash não sendo executado pelo cron [duplicado]

1

Eu tenho um script bash muito simples que funciona perfeitamente quando eu faço

./removeOldBackup.sh

ou

sh /home/myusername/backup/removeOldBackup.sh

mas quando eu adiciono a crontab like

* * * * * sh /home/myusername/backup/removeOldBackup.sh

ou

* * * * * /bin/sh /home/myusername/backup/removeOldBackup.sh

nunca funciona ...

Este é o meu script:

#!/bin/sh

find . -name 'files_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'files_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

find . -name 'database_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'database_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

Estas são as permissões do meu script:

-rwxr-xr-x 1 root root 295 Jul 25 10:07 /home/myusername/backup/removeOldBackup.sh

Crontab é adicionado para o usuário root.

Isso é o que eu acho em /var/log/syslog :

Jul 25 10:11:01 myservername /USR/SBIN/CRON[7583]: (root) CMD (sh /home/myusername/backup/removeOldBackup.sh)

Então, novamente, quando executo o script manualmente, meus arquivos de backup são removidos corretamente. Quando é executado pelo cron, eles nunca são removidos. Estou usando o debian-6.0-x86_64.

    
por borsuk 25.07.2014 / 10:39

1 resposta

1

Para formalizar e expandir o que alguém disse em um comentário, quando você coloca algo no crontab do root, ele é executado dentro de /root , não no diretório em que o script está, porque cron nem sabe onde é. Como os arquivos de backup não estão nessa árvore de diretórios, o comando find nunca os alcança. Portanto, o trabalho está em execução, ele nunca encontra arquivos para excluir. Fornecer um caminho absoluto para find ou adicionar cd /home/myusername/backup primeiro resolverá seu problema.

No entanto, parece não haver necessidade de executar este cronjob como root: todos os arquivos estão dentro do diretório home de myusername e presumivelmente pertencem a eles também. Por que não colocar seu cronjob dentro do crontab desse usuário? Execute crontab -e como myusername e adicione exatamente a mesma linha usada para a versão do root. Dessa forma, você não estará executando desnecessariamente uma tarefa como um usuário privilegiado (que exclui arquivos, nem menos) e também estará em um local de trabalho para o script começar.

    
por 25.07.2014 / 10:58