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

时间:2017-10-16 22:36:00

标签: php cron

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

我尝试的事情:

  • 更改脚本中的路径,但由于它是通过SSH执行的,因此不应该是问题
  • 在cron命令中更改PHP可执行文件的路径(我运行" whereis php"并使用了2个可用的PHP可执行文件位置)
  • 修改了文件权限
  • 将时间限制设为 ini_set(' max_execution_time',990000); 并通过 set_time_limit(990000);
  • 与托管公司的六张支持票,但他们无法帮助

我现在正在尝试的最后一件事,我认为无助于手动设置时间限制,之后cronjob将失败,包括: / bin / timeout -s 2 990000 但我觉得它没用,因为通常没有时间限制,除非我错过了什么。

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

这是我目前的cron命令:

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

所以我通过crontab执行CURL脚本,然后执行无法通过cron执行的脚本。这很难看,但它确实有效..

n

标题中的以下cron脚本,它对正常用户执行脚本的保护不力:

# 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!";

^检查文件是否由与服务器位于同一IP的脚本执行

答案 1 :(得分:0)

通常当PHP脚本通过Web服务器工作但不通过命令行界面时,因为配置不同。您可以尝试备份当前CLI的php.ini并将当前CGI的php.ini复制到CLI的位置。如果您能够正确执行脚本,则因为配置而知道它。