Crontab不执行bash脚本

时间:2013-04-25 15:22:17

标签: bash shell cron crontab

我很少使用Linux,所以不具备bash脚本和cron作业的经验。 这实际上是我的第一次尝试。所以它可能很容易修复。

我有以下内容:

/etc/cron.d/clear-mixtape-dir.sh 权限是:644

#!/bin/bash
# Clears the /tmp/mixtape2 directory
rm -rf "/tmp/mixtape2/"*

我的crontab文件如下所示:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

*/15 * * * * /etc/cron.d/clear-mixtape-dir.sh >/dev/null 2>&1

我尝试每15分钟执行一次.sh脚本。

我发现的一切都说这应该有效,但事实并非如此。

在这种情况下,文件权限(在/ tmp / mixtape2 /中的文件上)是否重要? 或者也许是在实际的.sh脚本上设置的权限 - 也许他们需要设置为可执行文件?

任何建议表示赞赏。

3 个答案:

答案 0 :(得分:3)

注意:这些注释引用/ etc / crontab。

在做任何其他事情之前,您正在访问哪个cron crontab -e

su -vim
<your-favorite-editor> /etc/crontab

如果您使用的是crontab -e,那么crontab的那种形式就不存在用户字段。这可能就是你没有跑步的原因。

在您的示例中,您的用户字段为*。我会使它成为root或具有适当权限的用户。

在运行这个程序之前,我会创建一个虚拟的crontab条目 回声“你好”并每分钟运行一次。得到它来处理您正在编辑的crontab(crontab -e或vim / etc / crontab)。然后将其用作模板,让脚本运行。

接下来,看看cron是否正在运行:

ps -ef | grep cron

如果它没有运行,请成为root并通过输入

启动它

/etc/init.d/cron start(Ubuntu和Red Hat)。

由于权限问题,您已经有了一个很好的答案,建议您将root用户添加为用户。我将建议更多的东西来帮助你调试。多年来我遇到了很多cron问题。

1)将电子邮件设置为已知地址,除非您将持续监控root用户的电子邮件

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin
MAILTO=fred@somewhere.com
HOME=/

2)在一切正常运行之前,从你的cron条目中取出>/dev/null 2>&1,以便在脚本运行后看到电子邮件中的输出。

3)将*/15降低到大于运行脚本的时间间隔 - likr */5,因此脚本运行得更频繁。

4)我不知道确切的原因,但是我用cron运行的脚本必须设置自己的环境,尽管在cron中以该用户身份运行。这可能包括cd /home/script-owner和运行source .bashrc等步骤,并调用设置环境变量的其他脚本。

答案 1 :(得分:3)

/etc/cron.d中的脚本中删除.sh扩展程序,然后将其调用。

run-parts会忽略名称中包含句点的文件,因此.sh扩展名会阻止您的脚本运行。

来自man cron -

  

文件必须符合run-parts(8)所使用的相同命名约定:它们必须仅包含大小写字母,数字,下划线和连字符。

答案 2 :(得分:-1)

 */15 * * * * root /etc/cron.d/clear-mixtape-dir.sh >/dev/null 2>&1

添加用户root,因为您的权限似乎仅适用于root。