【发布时间】:2011-10-24 21:05:26
【问题描述】:
我编写了一个 PHP 脚本,它使用 ftp_put 将图像从目录上传到远程服务器。我已使用任务调度程序和 wget 将其设置为 cron。最初它工作得很好,但过了一段时间,不知道确切的时间,进程冻结,由那个“windows任务调度程序”说它正在运行作业,但不再上传照片。
最初我认为问题是由于 max_execution_time ,但我已使用 set_time_limit(3600*24); 将其设置为 24 小时;我已将 max_input_time 设置为 600 秒(10 分钟)。
为什么没有完成任务?
代码如下:
if($conn){
if (is_dir($imagesPath)){
if($files = opendir($imagesPath)){
while(($file = readdir($files)) !== false){
if($file != "." && $file != ".." && preg_match("/\.jpg|\.JPG|\.gif|\.GIF|\.png|\.PNG|\.bmp|\.BMP/",$file) && date("Ymd",filemtime($imagesPath.'/'.$file)) >= date("Ymd",strtotime(date("Y-m-d")." -".$days." day"))){
if(ftp_put($conn, $remotePath.$file, $imagesPath.'/'.$file, FTP_BINARY)){
//echo $file;
$counter++;
}
else{
echo '<br>'.$imagesPath.'/'.$file;
}
}
}
closedir($files);
echo $counter.' Files Uploaded on '.date("Y-m-d");
}
else{
echo 'Unable to read '.$imagesPath;
}
}
else{
echo $imagesPath.' Does not exist';
}
ftp_close($conn);
}else{
echo "Failed to connect";
}
/* End */
exit;
添加:
/* Settings */
// Set Max Execution time
set_time_limit(3600*24);
在脚本的顶部。
谢谢。
【问题讨论】:
-
你检查过日志吗?您是否设置了 cron 作业以将输出保存到某个日志文件?
-
没看到代码,没法说。让脚本在每个主要状态输出一些调试/日志记录语句,并查看锁定之前的最后一个阶段是什么。
-
尝试分解任务并添加调试消息,这样您就可以查看连接是否失败或上传等 - 也许在某个时候达到了上传限制(允许的总存储空间)? - 我认为我们需要更多信息。
-
@bobo 好吧,您可以尝试调用
ftp_set_option($conn, FTP_TIMEOUT_SEC, 10);将默认的 90 秒超时时间缩短到 10 秒,看看是否有帮助... -
是的,但是如果这开始导致您的脚本终止,您知道这可能是 FTP 服务器的问题,而不是您的脚本的问题。您也可以尝试使用带有完整 FTP url 的
file_put_contents(),而不是使用 FTP 扩展名。我可能会做的是离开Wireshark,看看你的脚本和FTP服务器之间的网络流量,看看那里是否有任何线索......
标签: php cron scheduled-tasks