我有一个生成大型zip文件的PHP脚本,当我通过SSH执行它时,它可以工作,但是当通过cron执行时,同样的脚本间歇性地。
我尝试的事情:
我现在正在尝试的最后一件事,我认为无助于手动设置时间限制,之后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
感谢您的帮助。
答案 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的位置。如果您能够正确执行脚本,则因为配置而知道它。