Почему рабочий сценарий не выполняется как задание cron? [дубликат]

На этот вопрос уже есть ответ здесь:

Я написал сценарий для резервного копирования базы данных. Когда я выполняю его напрямую, он работает. Я попытался сделать это заданием cron, и пока оно выполняется (я проверял с помощью service status cron ), кажется, что оно тихо терпит неудачу.

Вот сценарий:

#!/bin/bash
echo "Starting mongo backup"
mkdir /home/ubuntu/backups
docker exec -it mongodb mongodump --archive=/root/mongodump.gz --gzip
docker cp mongodb:/root/mongodump.gz /home/ubuntu/backups/mongodump_$(date +%Y-%m-%d_%H-%M-%S).gz
echo "Mongo dump complete"
printf "[default]\naccess_key=\nsecret_key=\nsecurity_token=\n" > ~/.s3cfg
s3cmd put /home/ubuntu/backups/* s3://my-backup-bucket/
echo "Copy to S3 complete"
rm /home/ubuntu/backups/* -r
echo "Files cleaned"

Я использовал только абсолютные пути (РЕДАКТИРОВАТЬ: да, на самом деле я этого не делал) , без переменных окружения, без символов%. Не знаю, что я пропустил.

5
задан 29 March 2018 в 23:11

1 ответ

Одна возможная причина - то, что Вы не используете полные пути для команд, и некоторые Ваши команды не расположены в /usr/bin или /bin это принадлежит $PATH envvar в Кроне по умолчанию.

Можно ли узнать, где расположен каждый исполняемый файл команд командой which, например, which s3cmd. Затем можно поместить команды с их полными путями в сценарии.

Другой подход должен присвоить новое значение для $PATH в Вашем сценарии или в crontab: Почему crontab сценарии не работают?

Можно ли перенаправить вывод Cronjob в файл для отладки, где проблема. С этой целью измените Ваш задание таким образом:

* * * * * /path/to/the-script >/path/to/log-file 2>&1

Кроме того, я предпочел бы использовать $HOME вместо ~ в рамках сценариев.

4
ответ дан 23 November 2019 в 09:30

Другие вопросы по тегам:

Похожие вопросы: