自定义 crontab 不起作用 (FreeBSD)

自定义 crontab 不起作用 (FreeBSD)

我使用以下命令创建了文件 crontab.custom:

*/1 * * * * /home/username/data/www/run.sh  

run.sh包含:

php script.php  

之后我运行这个命令crontab crontab.custom

现在crontab -l返回我的任务。

我用 重新启动了 cron /etc/rc.d/cron restart,但script.php没有被调用。我应该怎么做才能让它发挥作用?

答案1

这可能是因为你的$PATH没有设置。当您尝试php在 shell 中执行时,实际上,它会php从您的 中查找 的绝对目的地$PATH,这是从中查找可执行文件的目录列表。这是在您的环境中设置的,但 cron 不共享该环境(事实上,它可能有一个空或未设置$PATH)。有几种解决方案(从最好到最差):

  • $PATH通过在其顶部添加类似内容来设置您的 crontab :
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • 使用脚本中可执行文件的完整路径php(这很糟糕,用户应该能够覆盖环境中的 PATH 以根据需要使用不同的二进制文件);

  • $PATH在脚本中明确设置(出于同样的原因不好)。

答案2

将以下行添加到 shell 脚本的顶部,如下所示

#!/bin/bash

PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
export PATH

然后使用 cron 作业

crontab -e

答案3

crontab 文件的问题往往与在 cron 下运行时的不同环境有关。由于您尚未提供该文件run.sh,因此以下是一些故障排除提示:

  1. 作为您自己,/home/username/data/www/run.sh在命令行中输入并确保它有效
  2. 确保所有路径在脚本中显式设置为完整路径
  3. 确认您已将数据添加到正确的位置 -crontab -e允许您编辑 crontab 文件
  4. 确保您有权使用 cron。你的用户名必须在/var/cron/allow文件中并且不在/var/cron/deny文件中
  5. 检查 /var/log/cron 的输出

相关内容