【问题标题】:Can't execute command from crontab?无法从 crontab 执行命令?
【发布时间】:2011-09-15 17:06:30
【问题描述】:

我想在每天 16:00 更新我数据库中的一些内容。

所以我使用 crontab 执行命令来运行我的 file.php 来运行更新。当我在 bash 中执行命令时它工作得很好,但是 crontab 有问题。

crontab:

00 16 * * * ./etc/cron.daily/maj_cat

maj_cat

php var/www/dev/update.php

谢谢!

【问题讨论】:

  • 您可能在var/www... 中缺少前缀斜杠
  • 什么是root的主目录? (或者也许你应该丢失路径名中的 . )。您是否在 maj_cat 上设置了执行位?而#!/bin/sh 行是当今的最佳实践。

标签: php command-line crontab execute


【解决方案1】:

Cron 在运行 cronjobs 时使用默认配置文件,它的 PATH 变量可能与您登录时使用的不同。您可以在 cronjob 开始时加载自己的配置文件,以确保 cronjob 的环境与您的登录环境。

您可以通过这种方式加载您的个人资料:

00 16 * * * ~/.profile; ./etc/cron.daily/maj_cat

【讨论】:

    【解决方案2】:

    可能 crondeaemon 不使用手动设置时设置的 PATH 变量。 确保 php 在路径中(在你的 crontab 的头部)。

    否则,您可以尝试在脚本中使用绝对路径。

    【讨论】:

      【解决方案3】:

      ./etc/cron.daily/maj_cat 是相对路径,var/www/dev/update.php 也是,试试:

      00 16 * * * /etc/cron.daily/maj_cat
      

      和 maj_cat:

      php /var/www/dev/update.php
      

      你可以这样做:

      00 16 * * * /usr/bin/env php /var/www/dev/update.php
      

      【讨论】:

      • 是的!它运行脚本,但它只更新了 100 篇文章数据库中的两篇文章......也许我需要声明运行时间?
      • 是的,你可以在文件或CLI的php.ini中设置:/etc/php5/cli/php.ini(取决于Linux发行版或bsd等),指令是: max_execution_time, ex: max_execution_time = 3600 // 一小时
      【解决方案4】:

      你会想要使用 PHP 的完整路径,

      输入: php在哪里

      通常 PHP 位于 /usr/bin/php

      导致: /usr/bin/php /var/www/dev/update.php

      我发现通过输出到文件来测试 crontab 是否正在执行很有用,因此您知道 cron 实际正在执行,例如:

      /usr/bin/php /var/www/dev/update.php > output.txt

      如上所示,您最好在“var”之前加上一个正斜杠。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 2019-08-04
        相关资源
        最近更新 更多