Проблема с crontab, скрипт запускается при запуске из команды
Это моя запись cron:
*/5 * * * * /home/user/scripts/backupDB.sh && echo "Backup Successful: $(date)" >> /home/user/tmp/mybackup.log
Это скрипт, который называется:
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
date_now=`date +%Y_%m_%d_%H_%M`
dir_name="BU/db_backup"
tar_name="db_backup_${date_now}.tar.gz"
file_name="${dir_name}/${tar_name}"
if [ -z "$dir_name" ]; then
mkdir $dir_name
fi
log() {
echo $1
}
do_cleanup(){
# rm -rf db_backup*
log 'cleaning up....'
}
do_backup(){
log 'snapshotting the db and creating archive' && \
mongodump -o ${HOME}/${dir_name} && tar -cjf ${HOME}/${tar_name} ${HOME}/${dir_name} || \
log 'data backd up and created snapshot'
log 'saving the backup archive in amazon S3' && \
s3cmd put --acl-private ${HOME}/${tar_name} s3://bucket-name/db-backups/${tar_name} && \
log 'data backup saved in amazon s3'
}
do_backup && do_cleanup
Дело в том, что этот скрипт работает из командной строки, а не из crontab. Я посмотрел на Причины, почему crontab не работает, и я сделал все, что там упомянуто.
Есть ли способ запустить его через cron?
РЕДАКТИРОВАТЬ: я в настоящее время работает как su -c user
Это создает проблему?
2 ответа
Попробуйте изменить команду cron на
bash -c '/home/user/scripts/backupDB.sh && echo "Backup Successful: $(date)" >> /home/user/tmp/mybackup.log'
Я обнаружил, что упаковка в bash помогла установить значения среды в прошлом. В результате вы можете даже создать части вашего скрипта.
Я думаю, что есть проблема с разрешениями скрипта. Вы пытались дать исполняемое разрешение для вашего файла sh? Я столкнулся с той же проблемой. Когда я запускаю командную строку с помощью команды sh, она запускается успешно. Но в crontab он не работал. Затем я предоставил 777 разрешений для сценария, и он работал через crontab. Кажется, проблема в Linux.