1

我用crontab -e. 然后我将它添加到我的 crontab 中:

SHELL=/bin/bash

@hourly /home/ec2-user/utilities/create-snapshots.sh

然后我保存了文件。大约一个小时后,cron 日志显示:

CROND[1876]: (ec2-user) CMD (/home/ec2-user/utilities/create-snapshots.sh)
CROND[1877]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)
CROND[1892]: (root) CMD (run-parts /etc/cron.hourly)
run-parts(/etc/cron.hourly)[1892]: starting 0anacron
run-parts(/etc/cron.hourly)[1901]: finished 0anacron

但是我知道该命令/home/ec2-user/utilities/create-snapshots.sh实际上并没有运行,因为它会创建我的数据库的快照,但它没有。/home/ec2-user/utilities/create-snapshots.sh如果我直接在终端中运行命令,则运行该命令有效。

我怎样才能让 cron 每小时运行一次该命令?

4

2 回答 2

5

我的心理调试能力告诉我create-shapshots.sh脚本运行,但由于环境变量问题(可能PATH)而失败。Cron 通常在清理过的环境中运行命令,所用的东西比你在 shell 提示符下通常拥有的东西要少得多。

于 2012-09-17T05:15:26.250 回答
0

我同意 Greg 的观点,即您的环境变量可能与您的想法不同。如前所述,它从一个空的石板开始。要调试变量,您可以使用 set 命令:

set >~/some-file.txt

您可以包含您的 .bash_profile 文件,但如果您缺少 PATH、HOME 等,那将没有那么有用。首先,您需要设置这些基本变量(尽管应该为用户 cron 脚本设置 HOME。)要加载您的 bash 配置文件脚本,请执行此操作,假设 $HOME 已正确设置:

. ~/.bash_profile

但是,阅读 anacrontab 手册页我看到了这个:

@period_name delay job-identify command

The period_name can only be set to monthly at the present time.
This will ensure jobs are only run once a month, no matter the
number of days in this month, or the previous month.

所以感觉你的@hourly 不起作用。显然,手册页可能在撒谎。我不是 100% 确定,因为我没有那么多地使用 Anacron。当前的 Cron 设置将自动使用 Anacron 运行预期会运行但由于计算机关闭而以某种方式失败的脚本。

于 2012-12-15T22:09:45.103 回答