Cron 未在 Ubuntu 上执行 Shell 脚本
Cron not executing Shell Script on Ubuntu
我有一个远程 .sh
脚本来备份 mySQL 文件。 Cron 运行 by .sh 文件未执行。 Crontab 的内容是:
#SHELL=/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin
* * * * * /home/ubuntu/dscript/db_backup.sh > /tmp/db.output
文件内容为:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
zipname="db_prod_$DATE.sql"
mysqldump db_prod > $zipname
aws s3 mv $zipname s3://mybackups/$zipname
rm -rf $zipname
zipname="db_staging_$DATE.sql"
mysqldump db_staging > $zipname
aws s3 mv $zipname s3://mybackups/$zipname
rm -rf $zipname
Bash路径
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
我在 Ubuntu.
文件处于 +x
模式。
检查 cron 错误:
尝试查看错误:
~$ sudo cat /var/log/syslog|grep CRON|grep db_backup.sh
~$ sudo cat /var/log/syslog|grep CRON|grep MY_USERNAME
(权限被拒绝或其他)
其中MY_USERNAME是用户执行:crontab -e
检查脚本错误:
* * * * * /home/ubuntu/dscript/db_backup.sh > /tmp/result.db.output
* * * * * /home/ubuntu/dscript/db_backup.sh 2> /tmp/error.db.output
或者干脆
* * * * * /home/ubuntu/dscript/db_backup.sh &> /tmp/error.and.result.db.output
问题是错误来自于cron的执行还是脚本,以上方法可以帮助您找到问题的根源。
#!/usr/bin/bash
DATE=$(date +%Y%m%d_%H%M)
zipname="db_prod_$DATE.sql"
SCRIPT_LOG_FILE="/tmp/backup.log"
echo "[${DATE}] [INFO] Starting personnal backup" > ${SCRIPT_LOG_FILE}
$(which mysqldump) db_prod > $zipname
if [ "$?" -eq "0" ] && [ -f ${zipname} ];then
echo "[$(date +%Y%m%d_%H%M)] [INFO] Mysqldump save file ${zipname}" > ${SCRIPT_LOG_FILE}
# file is created continue job with this file ...
$(which aws) s3 mv $zipname s3://mybackups/$zipname
rm -rf $zipname
else
echo "[$(date +%Y%m%d_%H%M)] [ERROR] Mysqldump can't save file ${zipname}" > ${SCRIPT_LOG_FILE}
fi
exit 0
而crontab -l必须是:
* * * * * /home/ubuntu/dscript/db_backup.sh &> /tmp/error.and.result.db.output
我有一个远程 .sh
脚本来备份 mySQL 文件。 Cron 运行 by .sh 文件未执行。 Crontab 的内容是:
#SHELL=/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin
* * * * * /home/ubuntu/dscript/db_backup.sh > /tmp/db.output
文件内容为:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
zipname="db_prod_$DATE.sql"
mysqldump db_prod > $zipname
aws s3 mv $zipname s3://mybackups/$zipname
rm -rf $zipname
zipname="db_staging_$DATE.sql"
mysqldump db_staging > $zipname
aws s3 mv $zipname s3://mybackups/$zipname
rm -rf $zipname
Bash路径
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
我在 Ubuntu.
文件处于 +x
模式。
检查 cron 错误: 尝试查看错误:
~$ sudo cat /var/log/syslog|grep CRON|grep db_backup.sh
~$ sudo cat /var/log/syslog|grep CRON|grep MY_USERNAME
(权限被拒绝或其他)
其中MY_USERNAME是用户执行:crontab -e
检查脚本错误:
* * * * * /home/ubuntu/dscript/db_backup.sh > /tmp/result.db.output
* * * * * /home/ubuntu/dscript/db_backup.sh 2> /tmp/error.db.output
或者干脆
* * * * * /home/ubuntu/dscript/db_backup.sh &> /tmp/error.and.result.db.output
问题是错误来自于cron的执行还是脚本,以上方法可以帮助您找到问题的根源。
#!/usr/bin/bash
DATE=$(date +%Y%m%d_%H%M)
zipname="db_prod_$DATE.sql"
SCRIPT_LOG_FILE="/tmp/backup.log"
echo "[${DATE}] [INFO] Starting personnal backup" > ${SCRIPT_LOG_FILE}
$(which mysqldump) db_prod > $zipname
if [ "$?" -eq "0" ] && [ -f ${zipname} ];then
echo "[$(date +%Y%m%d_%H%M)] [INFO] Mysqldump save file ${zipname}" > ${SCRIPT_LOG_FILE}
# file is created continue job with this file ...
$(which aws) s3 mv $zipname s3://mybackups/$zipname
rm -rf $zipname
else
echo "[$(date +%Y%m%d_%H%M)] [ERROR] Mysqldump can't save file ${zipname}" > ${SCRIPT_LOG_FILE}
fi
exit 0
而crontab -l必须是:
* * * * * /home/ubuntu/dscript/db_backup.sh &> /tmp/error.and.result.db.output