我有以下 crontab 配置;
45 9 * * * sh /home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log
我的脚本如下;
#!/bin/bash
### Backup Folder dir ###
BAK="/var/www/backup/mysql/"
GZIP="$(which gzip)"
### FTP SERVER Login Stuff###
FTPU="someuser1"
FTPP="somepass1"
FTPS="someftpsite1"
FTPUU="someuser2"
FTPPP="somepass2"
FTPSS="someftpsite2"
NOW=$(date +"%d-%m-%Y")
[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*
mysqldump -u root -h localhost --all-databases | gzip -9 > /var/www/backup/renko_backup_$NOW.sql.gz
lftp -u $FTPU,$FTPP -e "mput /var/www/backup/renko_backup_$NOW.sql.gz; quit" $FTPS > /home/renko/mysql_back_log.log
lftp -u $FTPUU,$FTPPP -e "cd some_dir;mput /var/www/backup/renko_backup_$NOW.sql.gz; quit" $FTPSS > /home/renko/mysql_back_log.log
mutt -s "database backup" [email protected] -a /var/www/backup/renko_backup_$NOW.sql.gz > /home/renko/mysql_back_log.log
mutt -s "Sunucu yedekleme" [email protected] -a /var/www/backup/renko_backup_$NOW.sql.gz > /home/renko/mysql_back_log.log
如果我使用下面的mysql.backup.sh命令;
sudo sh /home/renko/mysql.backup.sh
脚本运行完美……但是出于某种原因,crontab 无法使该脚本运行。我找不到 crontab 错误的日志。哦,在你问之前,我通过以下方式在 crontab 中添加了该作业;
sudo crontab -e
并通过以下方式重新启动 cron 服务;
sudo service cron restart
我似乎找不到问题所在。我使用的是内核为 2.6.38-8 的 Ubuntu Server。欢迎提供任何建议和指出任何来源。
答案1
需要检查几件事。你不需要sh
将 crontab 中的命令传递给 shell。你的特定问题可能可以使用标志来解决,-c
例如
45 9 * * * sh -c "/home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log"
这告诉 sh 从命令字符串而不是 stdin 读取命令。
通常你会使用
45 9 * * * /home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log
更新 1:
我认为您的问题部分在于您在 crontab 中重定向了脚本的输出,然后将各种命令的输出重定向到同一个文件。从脚本中删除到日志文件的输出重定向。
更新2:来自评论。
检查您的用户是否有权写入包含日志文件的目录。同时检查您的用户是否至少有权x
访问日志文件路径中的目录。
答案2
在检查东西的时候,我们可以去寻找最低公分母吗?放入 crontab
* * * * * /bin/touch /tmp/nose
如果您可以先执行此操作,以便/bin/touch /tmp/nose ; ls -al /tmp/nose ; rm /tmp/nose
我们可以验证/tmp
是否存在并且是否可在全球范围内写入(您会感到惊讶),那么我们至少可以说出 cron 是否是问题所在,或者是您的脚本所特有的。
编辑:好的,这是进步。现在,我们可以讨论一下你的剧本的时间安排吗?你能补充一下吗
45 9 * * * /bin/touch /tmp/toes
添加到您的 crontab 中?这样,我们就可以确认 cron 认为应该在那个时间执行的事情(例如您的脚本)确实应该执行。