Cron 作业显示在 GNOME Scheduler 中,但未执行

Cron 作业显示在 GNOME Scheduler 中,但未执行

我已经配置了 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 只是一个漂亮的前端atcrontab在默认的 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 组成员身份。

相关内容