Почему мой crontab -e не выполняет скрипт .sh?

Почему мой crontab -e не выполняет скрипт .sh?

У sudo crontab -eменя есть это:

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

*/2 * * * * date >> /home/rki/test.logработает без проблем, записывает в test.logфайл каждые 2 минуты.

Он просто не выполнит скрипт backup.sh, в котором есть следующее:

#!/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

Я могу сделать sudo sh dokuwiki_backup.shэто без проблем. Скрипт bash — chmoded 0777и chown rki:rki.

Что я делаю не так?

решение1

Если вы добавите cronjob через sudo crontab -e, он будет запущен как root.

  • Нет необходимости sudo, используйте:

    */5 * * * * /bin/sh /home/rki/docker-compose-stuff/dokuwiki/backups/dokuwiki_backup.sh
    
  • Рабочий каталог по умолчанию должен быть roots $HOME, поэтому обычно /root. Вы можете найти $name.tar.gzтам. Но лучше использовать абсолютные пути, например:

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

решение2

Для запуска cronjobs в полной среде root используйте эту команду

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

Связанный контент