crontab 存在问题,从命令执行时运行脚本

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会带来问题吗?

答案1

尝试将您的 cron 命令更改为

bash -c '/home/user/scripts/backupDB.sh && echo "Backup Successful: $(date)" >> /home/user/tmp/mybackup.log'

我发现,过去将内容包装在 bash 中有助于设置环境值。您甚至可以转储部分脚本。

答案2

我认为脚本权限存在问题。您是否尝试过为 sh 文件授予可执行权限?我遇到了同样的问题。当我使用 sh 命令通过命令提示符运行时,它成功运行。但是在 crontab 中,它没有运行。然后,我为脚本提供了 777 权限,它通过 crontab 运行。看来问题出在 Linux 上。

相关内容