我已经配置了 Back In Time 和 MySQL Administrator,以便每天 15:00 进行备份。为了确保万无一失,我安装了 Gnome Scheduler,以查看这两个应用程序是否已在那里注册。它们已在 gnome scheduler 中注册,但它们不执行备份操作。
这是 Gnome Scheduler 的屏幕截图。
我怎么解决这个问题?
更新
命令的输出crontab -l
如下:
bakhtiyor@ubuntu-vm:~$ crontab -l
0 15 * * * /usr/bin/mabackup -d /home/bakhtiyor/backup/MySQL -x my-backup profile # JOB_ID_3
0 15 * * * nice -n 19 /usr/bin/backintime --backup-job # JOB_ID_2
更新2
命令的输出grep CRON /var/log/syslog
如下:
Nov 30 11:39:01 ubuntu-vm CRON[7663]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm)
Nov 30 11:39:02 ubuntu-vm CRON[7661]: (CRON) info (No MTA installed, discarding output)
答案1
Gnome Scheduler 只是一个漂亮的前端at
。crontab
在默认的 Ubuntu 中,cron
主要运行anacron
它,负责在可能未在应该触发任务时运行的机器上运行定期任务。
要检查的事项包括:
- cron 正在运行吗?
ps -C cron
- cron 配置了吗?
cat /etc/crontab
- cron 是否从 /etc/crontab 调用 anacron?
- anacron 安装了吗?
ls /usr/sbin/anacron
- cron 或 anacron 是否记录任何消息?
grep CRON /var/log/syslog
对于最后一步,logrotate
可能已经存档了较旧的系统日志,因此如果 grep 没有结果,请尝试
(cat /var/log/syslog.[0-9] ; zcat /var/log/syslog.*.gz) | grep CRON
我的猜测是 gnome-scheduler 以错误的权限设置了作业(可能是您而不是超级用户),因此投诉会出现在系统日志中。
回应更新
鉴于您示例中的 shell 提示符crontab -l
,您几乎肯定列出了 bakhtiyor 的每个用户 crontab,它可能没有运行您的(有点不透明的)作业的权限。
系统日志条目将显示作业是否正在运行,如果正在运行,则显示作业是否有投诉。
答案2
根据您的日志条目,看起来您的作业最近没有运行。
您还应该检查存档的 cron 日志,因为它可能自上次运行以来已经更新。
为了进一步调试,我将添加此作业,使用crontab -e
*/5 * * * * echo hello
看看它是否会向您发送邮件,以及它是否出现在日志文件中。
更新:如果它出现在日志文件中但没有向您发送邮件,那么您可能需要安装邮件代理来查看备份作业的输出,或者在将输出重定向到日志文件的情况下运行它们。例如,您可以使用将crontab -e
一行更改为
0 15 * * * nice -n 19 /usr/bin/backintime --backup-job >> ~/log/backup.log 2>&1
您将需要创建~/log
目录。
答案3
这个解决方案对我有用: https://answers.launchpad.net/backintime/+question/90513
我的工作配置保存在我的用户下而不是 root 下,因为我使用的是sudo backintime-gnome
而不是gksu backintime-gnome
。
sudo 不会改变 HOME 环境,这会导致问题:
$ sudo env | grep ^HOME
HOME=/home/user
$ gksu env | grep ^HOME
HOME=/root
答案4
我遇到过类似的问题,这让我很为难。假设 cron、crontab 和 anacron 都正常,关键症状是,如果使用 gnome-schedule 的“立即运行”按钮调用,任务可以正确运行,但如果置之不理,则不会按计划运行。
这主要是图形环境问题。我的建议是为任务脚本创建一个包装器,例如“task-wrapper”:
#!/bin/sh
gnome-terminal -x /home/username/task
确保任务包装文件是可执行的,并在 gnome-schedule 中将任务创建为 X 应用程序。或者,像这样编写:
#!/bin/sh
export DISPLAY=:0
gnome-terminal -x /home/username/task
/home/username/task 脚本现在将在控制台窗口中运行,完成后将关闭。我的脚本通常需要 sudo 身份验证,因此我像这样启动“task”脚本:
#!/bin/sh
set -e
MESSAGE="The task script wants to ..."
gksudo --message "$MESSAGE" cd /whatever
cd 命令是无害的,MESSAGE 解释了脚本请求授权的原因,而“set -e”确保脚本在用户点击“取消”时中止。脚本的其余部分可以使用简单的“sudo”调用,除非命令之间间隔很长时间,否则这些调用将会成功。
在 Ubuntu 12.04 下,似乎不需要 crontab 组成员身份。