我正在尝试让 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 中的文件是否被自动检测到或者我需要做其他事情来初始化它们?
请注意,目录/etc/cron.d
是供软件包使用的,crontabs 应该安装到用户的 crontab 中。话虽如此,请查看以下Cron 问题:
- 该脚本没有执行权限。使用 chmod a+x 提供权限。
- 在 php、perl 或其他脚本语言的情况下,解释器或程序的路径不正确。在定义要在 cron 中运行的命令时,始终提供解释器的实际路径。要找出程序所在的位置,请使用 whereis 命令。例如对于 php,whereis php。对于 perl,whereis php 等。
- 运行脚本所需的环境变量不可用。cron 不使用与用户相同的环境。它在运行命令时使用自己的环境。所以 .login 或 .profile 中定义的变量对他来说是不可见的。最常见的问题与不相似的 PATH 变量有关。
cron 文件有两种风格。
安装在下面的文件/etc/cron.d
是系统cron 文件。他们要求每行的第 6 个字段是用于运行命令的用户帐户。/etc/cron.d
有关示例,请参见下面的其他文件。
非系统 cron 文件只有通常的 5 个字段来指定作业何时运行,然后是运行命令。它们由命令安装crontab
,由将运行命令的用户帐户执行。这可能是您想要使用的。
要么添加root
为相关行的第 6 个字段,要么crontab prod.cron
以 root 身份运行(或作为应运行命令的任何帐户)。
当然要确保php
命令在指定的$PATH
.