cron 运行但没有任何反应

cron 运行但没有任何反应

我创建了一个名为“forward_email.sh”的脚本,并将权限设置为 777。它包含以下行:

echo "It worked: $(date)" >> /home/noc/email.log

我使用以下行创建了一个 cron 作业:

*/5 * * * * /home/noc/forward_email.sh

问题是“email.log”文件从未改变。我甚至将权限设置为 666。当我手动运行脚本时,它运行正常。

cron 作业根据“/var/log/cron.log”文件运行。

有人能告诉我哪里出了问题吗?这是 Ubuntu Server 9.04 的最小虚拟机安装,通过 apt-get 安装 cron。

更新:我犯了一个非常愚蠢的错误。我将脚本命名为“forward_mail.sh”。直到我安装了一些电子邮件服务并收到来自 Cron 的以下错误电子邮件时,我才发现自己的错误。

/bin/sh: /home/noc/forward_email.sh: not found

我更改了文件的名称,现在可以正常工作了。

答案1

我的脑子里浮现出很多可能的事情。

你确定 crontab 条目确实指向你的脚本吗?例如,如果你想运行如下脚本~noc/bin/script.sh,但有一个像/home/noc/bin/脚本(即一个微妙的拼写错误)那么它当然不会起作用。我通常用鼠标将命令从 crontab 中复制出来,然后将其粘贴到命令提示符中来检查我的 crontab 条目,只是为了 100% 确保它会运行我想要它运行的内容。

你的脚本是否包含仅有的指定的行?通常你必须包括类似以下内容:

#!/bin/bash

...在脚本的顶部使其工作。

如果它比单线更复杂,你会当然编程逻辑是否允许它运行该特定线路?

尝试将脚本缩减为

#!/bin/bash
echo "Bing!" >> /tmp/cronjob

...看看会发生什么。如果成功,则说明您的 cron 脚本存在编程问题。如果失败,则说明您的 cron 存在问题。

'noc' 用户是运行该脚本的用户吗?如果不是,您确定运行 cron 脚本的用户可以通过 /home/noc 对 email.log 文件具有读/写权限吗?

运行 cronjob 的用户发送的错误电子邮件会发到哪里?会生成错误电子邮件,然后发送到你意想不到的地方,或者可能被完全丢弃吗?尝试运行 cronjob

#!/bin/bash
echo "Bing!"

...然后尝试弄清楚生成的电子邮件去了哪里。

cron.deny 和/或 cron.allow 是否起作用?如果 /etc/cron.allow 存在,则用户 noc 必须在其中列出;如果 /etc/cron.deny 存在。用户 noc 必须不是在其中列出。在 RedHat 上,如果 cron.allow 和 cron.deny 都不存在,则只有 root 用户才被允许使用 cron。

答案2

Cron 在运行时设置了有限的环境变量,尤其是您的$PATH。尝试输入任何二进制文件的完整路径。因此/home/noc/forward_email.sh应该是:

/bin/echo "It worked: $(date)" >> /home/noc/email.log

另外,*/5脚本开头做什么? */5每五分钟运行一次,5每小时运行一次“整点过 5 分钟”。

5    *   *   *    * /home/noc/forward_email.sh
#*   *   *   *    *  command to be executed
#-   -   -   -    -
#|   |   |   |    |
#|   |   |   |    +----- day of week (0 - 6) (Sunday=0)
#|   |   |   +------- month (1 - 12)
#|   |   +--------- day of month (1 - 31)
#|   +----------- hour (0 - 23)
#+------------- min (0 - 59)

最后,您是否使用以下命令编辑并保存了 crontab:

crontab -e

...您的编辑器是由环境变量选择的吗$EDITOR

答案3

echo "It worked: $(date)" >> /home/noc/email.log

在运行脚本之前是否/home/noc/email.log存在?运行 cron 作业的用户是否可以写入?如果事先创建它会发生什么?例如

touch /home/noc/email.log
chmod 666 /home/noc/email.log

答案4

如果您对脚本有任何疑问,请将以下行放在脚本顶部:

 #!/bin/bash -x

(如果不用这个壳就放好的那个)

使用-x(eX您可以使用“显式”选项,该选项将以调试模式运行整个脚本。在命令展开之后但在执行之前,每个命令及其参数的踪迹都会打印到标准输出中。

相关内容