【问题标题】:Cron not passing params to PHP scriptCron 没有将参数传递给 PHP 脚本
【发布时间】:2017-03-01 22:02:22
【问题描述】:

我有一个像

这样的 cron 作业集
php /home/novinarb/public_html/index.php --uri="cron/24satahr"

但 'uri' 参数根本没有进入 php 脚本。我也试过没有 -- 在 uri 前面但仍然没有。有什么想法吗?

【问题讨论】:

  • 当你说它根本没有到达 PHP 脚本时,你的意思是 var_dump($argv); 在 PHP 脚本中是空的?
  • 在您的 php.ini 中,register_argc_argv 设置为 On
  • @Femi 是肯定的,再次 :) 我检查了“通常的嫌疑人”并最终到了这里,仍然没有
  • 这是什么版本的 PHP,如果您不介意我问:在 4 系列中有几个 argv 错误,但在 5 系列中我不知道什么?
  • 另外,我想我的答案被删除了。我不反对将答案标记为错误或不是解决方案,但那种声音中的问题是我回答的方式之一。也许我应该扩展更多,但我真的不认为@Kemo 需要更多的澄清。

标签: cron


【解决方案1】:

更强大的方法是在您的 PHP 脚本中使用getopt()$argv 接受命令行参数并使其可执行。 $argv 的示例称为 script.php

#!/usr/bin/php
<?php
  if (isset($argv[1])):
    echo $argv[1];
  endif;
?>

使其可执行:

chmod +x script.php

并执行:

./script.php "cron/24satahr"

将输出:

cron/24satahr

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但在阅读了 php 的手册后能够修复它。

    一开始我有这样的设置:

    /usr/bin/php -f /path/to/php/script.php -c 1426 >> /tmp/script.php.log 2>&1
    

    我可以通过将行更改为:

    /usr/bin/php -f /path/to/php/script.php -- -c 1426 >> /tmp/script.php.log 2>&1
    

    根据手册条目,语法是:

    php [options] [ -f ] file [[--] args...]
    

    还有,

     args...        Arguments passed to script. Use '--' args when first argument starts with '-' or script is read from stdin
    

    这样,我的 cron 命令变成:

    /usr/bin/php -f /path/to/php/script.php -- -c 1426 >> /tmp/script.php.log 2>&1
    

    它有效!

    【讨论】:

      【解决方案3】:

      php 脚本是否在运行?

      我怀疑您需要在 crontab 行中提供 php 的完整路径。即使 cron 作业以您的身份运行,它们也没有设置您的任何登录环境;这意味着他们没有你的 $PATH。

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2019-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 2011-04-07
        • 2015-05-19
        • 1970-01-01
        • 2012-03-15
        相关资源
        最近更新 更多