Cron任务未运行。

4

以下是crontab中的条目:

MAILTO=abc@gmail.com
45 14 * * * /home/user/simple.sh

我还对 simple.sh 进行了 chmod +x,但是 crontab 没有运行,甚至没有发送电子邮件。

pgrep cron 显示一个 ID。我也试着重启了 crond。但是没成功!请问有人能指出这里的错误吗?

simple.sh 脚本如下:

#! /bin/bash
echo hello

谢谢


你在 simple.sh 中添加了 shebang 吗?此外,这个 shell 脚本是做什么的?它能在命令行上手动运行吗? - Anshul Goyal
@ansh0l:是的,#! /bin/bash。它只是一个回声。就是想让cron运行。 - nish
我认为你的cron肯定在运行,问题出在simple.sh文件中。你如何使用echo命令?你将输出重定向到其他文件了吗?首先,你可以尝试45 14 * * * /home/user/simple.sh >> /home/user/cron.log,然后告诉我是否将适当的内容输出到了cron.log文件中。 - Anshul Goyal
我在我的机器上尝试了cron,它完美地运行了。你能否尝试每分钟运行一次它 * * * * * /home/user/simple.sh >> /home/user/cron.log - Anshul Goyal
非常感谢您的帮助。这个程序可以正常工作,cron每分钟都会将“hello”写入cron.log文件中。但是我没有收到邮件。 - nish
显示剩余5条评论
3个回答

6

因为您在cron作业脚本中使用了echo,所以您需要将其输出捕获到某个地方。

您的shebang和文件模式(使用chmod +x)都正确,因此这不是问题,而且不使用/bin/sh运行应该没问题。

尝试使用以下命令将输出内容记录在cron.log文件中(此命令每分钟运行一次):

* * * * * /home/user/simple.sh >> /home/user/cron.log

请注意,cron作业在单独的子进程外壳中运行,具有减少的环境,因此其输出不会在终端上可见。
关于发送电子邮件 - 您需要配置一些邮件包(如postmanmutt等)以便cron守护程序发送错误邮件。

谢谢,伙计。我花了一整天的时间来弄清楚我的cron出了什么问题,最后我只需要在crontab中添加/bin/sh就行了。 - Nezir

4

不要使用相对路径,而应使用绝对路径。另外,请指定运行脚本的二进制文件,即/bin/sh(或者来自which sh的任何内容):

45 14 * * * /bin/sh /path/to/script/simple.sh

没有帮助。我甚至都收不到邮件,不知道为什么。 - nish
1
你的脚本是独立工作还是在crontab中使用时停止工作?请注意,它每天只会运行一次,时间为14:45。 - fedorqui

0
也许你的 .sh 脚本第一行不应该有空格:
#! /bin/bash

#!/bin/bash

虽然我可以理解为什么在交互式 shell 中调用时它仍然有效(# 可以仅注释掉该行的其余部分)。

不过,最坏的情况下,它只会忽略那一行并继承 cron 的解释器 /bin/sh


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接