代码之家  ›  专栏  ›  技术社区  ›  Robert Sinclair

Cronjob脚本失败,但可以通过浏览器(Zip-Archive-PHP)工作

  •  1
  • Robert Sinclair  · 技术社区  · 8 年前

    我有一个PHP脚本,它可以生成大型zip文件,当我通过SSH执行它时,它可以工作,但同一个脚本失败 间歇性地 当通过cron执行时。

    我尝试过的事情:

    • 在cron命令中更改PHP可执行文件的路径(我运行了“whereis PHP”并使用了2个可用的PHP可执行文件位置)
    • 将时间限制设置为 设置时间限制(990000);

    /箱子/超时-s 2 990000

    日志文件显示,在我从类ZipArchive实例化一个对象,然后尝试执行addFile方法后,脚本失败。

    这是我当前的cron命令:

    30 4 * * * /bin/timeout -s 2 990000 /usr/bin/php /home/script.php > /tmp/script.log
    

    2 回复  |  直到 8 年前
        1
  •  0
  •   Niels    8 年前

        2
  •  0
  •   Robert Sinclair    8 年前

    不幸的是,使这项工作的唯一解决办法是一个丑陋的工作,这是伟大的。这是一个简单的CURL脚本,它执行crontab无法执行的文件。。然后我将CURL文件放在crontab中。

    # Open a PHP/CURL session
    $s = curl_init();
    
    # Configure the PHP/CURL command
    curl_setopt($s, CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
    curl_setopt($s, CURLOPT_URL, "HTTP://YOUR_DOMAIN.COM/SCRIPT.PHP"); // Define target site
    curl_setopt($s, CURLOPT_RETURNTRANSFER, TRUE);  // Return file contents in a string
    curl_setopt($s, CURLOPT_BINARYTRANSFER, false);  // Indicate binary transfer
    curl_setopt($s, CURLOPT_REFERER, "https://google.ca");     // Referer value
    curl_setopt($s, CURLOPT_SSL_VERIFYPEER, FALSE); // No certificate
    curl_setopt($s, CURLOPT_FOLLOWLOCATION, TRUE);  // Follow redirects
    curl_setopt($s, CURLOPT_MAXREDIRS, 4);          // Limit redirections to four
    
    # Execute the PHP/CURL command (send contents of target web page to string)
    
    if($run_the_script = curl_exec($s))
        echo "cron executed!";
    

    cron脚本在标题中包含以下内容,它对执行脚本的正常用户提供了松散的保护:

    if (isset($_SERVER['REMOTE_ADDR']) AND $_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']) die('Permission denied.');
    

    推荐文章