Por que meu crontab -e não executa o script .sh?

Por que meu crontab -e não executa o script .sh?

Em sudo crontab -eeu tenho isso:

*/2 * * * * date >> /home/rki/test.log
*/5 * * * * sudo sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh

*/2 * * * * date >> /home/rki/test.logfunciona sem problemas, escrevendo a cada 2 minutos no test.logarquivo.

Simplesmente não executará o backup.shscript que contém isto:

#!/bin/bash
# Remove previous backups
#sudo rm dokuwiki-backup*.tar.gz

# Set backup name
name=dokuwiki-backup_$(date '+%Y-%m-%d-%H%M%S')

# Backup stuff
/bin/tar -zcvf "$name.tar.gz" /var/lib/docker/volumes/dokuwiki_data

Posso ficar sudo sh dokuwiki_backup.shbem sem problemas. O script bash é chmoded 0777e chown rki:rki.

O que é que estou fazendo de errado?

Responder1

Se você adicionar seu cronjob via sudo crontab -e, ele será executado como root.

  • Não há necessidade de sudousar:

    */5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh
    
  • O diretório de trabalho padrão deve ser roots $HOME, normalmente /root. Você pode encontrar $name.tar.gzlá. Mas é melhor usar caminhos absolutos, por exemplo:

    /bin/tar -zcvf "/home/rki/Backups/$name.tar.gz" /var/lib/docker/volumes/dokuwiki_data
    

Responder2

Para executar cronjobs com ambiente root completo, use este comando

*/5 * * * * su - root -c '/home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh'

informação relacionada