【问题标题】:How to autorun crons?如何自动运行 crons?
【发布时间】:2012-11-30 12:21:25
【问题描述】:

我正在尝试让 crontab 自动运行一个文件,内容如下:

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

*/5 * * * * php /path/to/script

我已将这个名为 prod.cron 的文件放入 /etc/cron.d 文件夹,但似乎无法让它自己运行。通过命令行直接运行脚本表明它可以正常工作,但不确定 cron.d 中的文件是否被自动检测到或者我需要做其他事情来初始化它们吗?

【问题讨论】:

  • 您的系统上有用户php 吗? crontabs 的第 6 个字段是登录名。
  • 您应该通过crontab -e(作为必须运行 cronjob 的用户 ID)“提交”cronjobs,而不是将文件放在 /etc 或 /var 中。查看man crontab
  • 是的,我以前使用过 crontab,但我在这里尝试了一些不同的东西。有 cron.* 文件夹会自动为您运行脚本,而无需编辑 crontab,这就是我在这里想要弄清楚的。
  • 不要认为你需要一个用户,我看到很多例子只是在做类似*/1 * * * * /usr/local/bin/php /path/to/script
  • chmod +x你的/etc/cron.d/prod.cron了吗?

标签: bash cron centos


【解决方案1】:

注意/etc/cron.d 目录是供软件包使用的,crontabs 应该安装到用户的 crontab 中。话虽如此,请查看以下Cron Issues

  1. 脚本没有执行权限。使用 chmod a+x 提供权限。
  2. 对于 php、perl 或其他脚本语言,解释器或程序的路径不正确。始终提供实际路径 解释器在定义要在 cron 中运行的命令时。找出答案 程序所在的位置,使用 whereis 命令。例如 对于 php,这里是 php。对于 perl、whereis php 等
  3. 运行脚本所需的环境变量不可用。 cron 不使用与用户相同的环境。它 运行命令时使用自己的环境。所以变量 在 .login 或 .profile 中定义的对他来说是不可见的。最普遍的 问题与不相似的 PATH 变量有关。

【讨论】:

    【解决方案2】:

    cron 文件有两种风格。

    /etc/cron.d 下安装的文件是 system cron 文件。他们要求每行的第 6 个字段是用于运行命令的用户帐户。有关示例,请参见 /etc/cron.d 下的其他文件。

    非系统 cron 文件只有通常的 5 个字段来指定作业何时运行,然后是运行命令。它们由crontab 命令安装,由运行命令的用户帐户执行。这可能是你想要使用的。

    要么将root 添加为相关行的第 6 个字段,要么以 root 身份运行 crontab prod.cron(或任何应运行该命令的帐户)。

    当然还要确保php 命令在指定的$PATH 中。

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 2023-01-30
      • 2021-04-29
      • 2014-02-28
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多