我安装了一个 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 的消息列表。