为什么 (ana)cron 没有运行我的任何作业并且没有给出任何错误输出?

为什么 (ana)cron 没有运行我的任何作业并且没有给出任何错误输出?

我安装了一个 cron 作业,但未运行。我安装了它crontab -e并输入了以下内容。

0 12 * * * /var/www/drupal/scripts/dump_sites
* * * * * wall /tmp/test

我把第二个命令用于测试目的。确实有一个文件 /tmp/test,它里面只是写着“这是一个测试”。

退出时crontab -e没有收到任何错误消息。 没有 cron 的日志文件/var/log/。我用 停止了 cron service cron stop,并尝试用 启动它以cron -L 2获得更好的调试输出,但仍然没有日志。

我手动运行/var/www/drupal/scripts/dump_sites并获得了预期的行为,即输出文件出现在我希望的位置。当我尝试使用 cron 时,我没有获得预期的行为。

当我这样做时,ps aux | grep cron我可以看到它与关联的进程 ID。

我暂时放弃了 cron,尝试了 anacron。ps aux | grep cron现在得到以下结果。但是,我的dump_sites脚本仍然无法运行。

devcampus :: /var/www/drupal » ps aux | grep cron   
root     15635  0.0  0.1  12440   928 ?        Ss   11:59   0:00 anacron -f
root     15816  0.0  0.1   4092   608 ?        S    12:04   0:00 /bin/sh -c nice run-parts --report /etc/cron.daily
root     15818  0.0  0.1   3996   620 ?        SN   12:04   0:00 run-parts --report /etc/cron.daily
root     15825  0.0  0.1   4092   680 ?        SN   12:04   0:00 /bin/sh /etc/cron.daily/apt

我的/etc/anacrontab文件看起来像这样。

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries
1       5       cron.daily       nice run-parts --report /etc/cron.daily
7       10      cron.weekly      nice run-parts --report /etc/cron.weekly
@monthly        15      cron.monthly nice run-parts --report /etc/cron.monthly

# period  delay  job-identifier  command
@daily    14     backup          /var/www/drupal/scripts/dump_sites

我正在运行 Ubuntu 10.04,并且我相信这个盒子正在 Xen 虚拟化服务器上​​运行。

devcampus :: /var/www/drup
2.6.32-23-server

更新:显然它正在与 anacron 合作。


根据要求,情况如下dump_sites

#!/usr/bin/env ruby

DRUPAL_ROOT = File.expand_path(File.dirname(__FILE__) + '/../')
SITES_ROOT = File.join(DRUPAL_ROOT, 'sites')
CONFIG_FILES = Dir.glob(File.join(SITES_ROOT, "*", "dbconfig.php"))

databases = CONFIG_FILES.map do |cf|
  contents = File.read(cf)
  contents =~ /dbname='(.*)'/ ? $1 : nil
end

databases.uniq!
databases.sort!

databases.each do |db|
  file_name = File.join(DRUPAL_ROOT, "db_dumps", "#{db}_#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")}.sql")
  `mysqldump -uusername -ppassword #{db} > #{file_name}`
end

只是一个普通的旧 Ruby 脚本。

答案1

您的 cron 运行应该已登录/var/log/syslog。如果有错误,您应该会收到电子邮件。

通常,当脚本从命令行运行但无法从命令行运行,cron这是因为环境不同。PATH明确设置变量和/或使用所有文件和可执行文件的完整路径是个好主意。我看到你在条目中这样做了crontab,但你应该检查脚本本身。

此外,PATH您的脚本可能还有其他环境依赖项。如果没有看到,我无法猜测它们可能是什么。

答案2

请记住,cron 脚本不会在您的完整用户环境(PATH 等)下运行,因此 cron 很可能正在运行您的脚本,但该脚本不起作用。

答案3

cron 错误通常会发送到邮件。您尝试检查过吗?只需在命令行中输入 mail,您就会看到来自 cron 的消息列表。

相关内容