【问题标题】:How to run a php script in cron如何在 cron 中运行 php 脚本
【发布时间】:2010-10-16 02:04:29
【问题描述】:

我发现了很多关于这个的问题和文章,但我仍然有一些困难。 我正在使用以下命令 /usr/bin/php home/domain.com/public_html/cron/script.php 我收到以下错误 状态:404 未找到 X-Powered-By: PHP/5.2.8 内容类型:text/html

没有指定输入文件。

我正在使用 Cpanel,该文件托管在 domain.com/cron/script.php 任何想法,谢谢:p

【问题讨论】:

    标签: cron php


    【解决方案1】:

    试试:

    wget -O - http://domain.com/cron/script.php
    

    看看你是否能得到更好的结果。

    编辑:添加“-O-”以不将输出写入主文件夹。

    【讨论】:

    • 我的可能有用,但你可能想看看混乱的更合理的答案。
    • 这对我来说效果很好!因为我的 PHP 脚本也有一些命令编码来安排电子邮件。谢谢@Lacqui
    【解决方案2】:

    在脚本名称前加上斜杠,即

    /usr/bin/php /home/domain.com/public_html/cron/script.php
    

    除非你真的打算通过网络运行脚本,如 lacqui 的回答,并且你不介意随机的第三方能够随时运行它,你没有理由应该把它放在你的 public_html 目录中;恰恰相反。

    【讨论】:

    • 我会在这里添加,因为这对 OP 来说可能并不明显:随机第三方能够“随时”运行它,我也指“每秒多次”。由于 CPU 密集型和内存密集型任务通常是 cron 作业的候选对象,因此您可能会给人们带来简单的拒绝服务攻击。
    • 仅当您不确定它没有先运行时。使用您的数据库创建一个保护“CRON last started at”时间戳。如果时间戳是 X 分钟/小时,那么在你的 cron 中不要运行。
    • 实际上这可能行不通。您最好使用cd /home/domain.com/public_html/cron/ && /usr/bin/php script.php 正确设置工作目录
    • 作业不会在非公用文件夹中运行。例如/home/username/etc/cron.php 不起作用,但如果放在公共文件夹中,它会起作用。
    【解决方案3】:

    您可能需要使用称为 php-cli 的二进制文件,而不仅仅是 php。

    【讨论】:

    • 这适用于 Windows,在 *nix 中您只需使用 /usr/bin/php。提到 cron,它绝对是 *nix 环境。
    • @cemkalyoncu:一些系统附带一个单独的 php-cli,其中包含诸如 readline 等额外内容。可以在命令行上派上用场。
    【解决方案4】:

    我意识到这是一个老问题,您可能已经找到了解决方案,但上面的答案都没有帮助我,而且我在运行 cron 脚本时遇到了同样的 404 错误。

    问题与编写 php 脚本路径的方式有关。路径必须从 public_html 开始,像这样/usr/bin/php public_html/public/index.php

    【讨论】:

      【解决方案5】:

      在几个共享主机中 wgetcurl 命令不能从 cron 中使用。如果想从 cron 执行 web (http) 请求,则可以通过在 cron php 脚本中将所需的 web url 作为 php curl 调用来完成。

      下面是一个示例代码放在 cron php 文件中:

      <?php
      function callRemoteHttp($url)
      {
      
          $curl = curl_init();    
      
          curl_setopt($curl, CURLOPT_URL, $url);
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      
          $result = curl_exec($curl);
          $ret_arr = array('data' => $result, 'status_code' => curl_getinfo($curl, CURLINFO_HTTP_CODE));
          curl_close($curl);
      
          return $ret_arr;
      }
      $ret = callRemoteHttp('http://example.com?param1=value1&param2=value2');
      ?>
      

      【讨论】:

        猜你喜欢
        • 2018-03-22
        • 2012-06-27
        • 1970-01-01
        • 2014-11-01
        • 2018-07-05
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多