4

我很少使用 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 脚本上设置的权限 - 也许他们需要设置为可执行?

任何建议表示赞赏。

4

3 回答 3

4

从脚本中删除 .sh 扩展名,/etc/cron.d它将被调用。

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

man cron——

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

于 2013-09-18T01:04:00.853 回答
3

注意:这些注释是指 /etc/crontab。

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

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

如果您使用的是 crontab -e,则该 crontab 形式中不存在用户字段。这可能就是你不跑步的原因。

在您的示例中,您的用户字段是 *. 我会将其设为 root 或具有适当权限的用户。

在运行这个程序之前,我会创建一个虚拟的 crontab 条目,它只会回显“Hello”并每分钟运行一次。让它在你正在编辑的 crontab 上工作(crontab -e 或 vim /etc/crontab)。然后使用它作为模板,让你的脚本运行。

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

ps -ef | grep cron

如果它没有运行,请成为 root 并通过 enter 启动它

/etc/init.d/cron start(Ubuntu 和红帽)。

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

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

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

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

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

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

于 2013-04-25T18:25:16.843 回答
-1
 */15 * * * * root /etc/cron.d/clear-mixtape-dir.sh >/dev/null 2>&1

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

于 2013-04-25T15:33:22.327 回答