이 스크립트를 실행하기 위해 cron을 설정했습니다. 재귀를 사용하여 테이블을 업데이트했습니다 (매번 250 행). 처음에는 잘 돌아 가지 만 몇 분이 지나면 "마침"을 인쇄하지 않고 멈 춥니 다. 그것은 서버의 메모리 문제로 보인다. 나는 PhpMyadmin에서 "Processes"를 점검하고 잘 실행되는지 확인했지만 몇 분 후에 멈 춥니 다. 그것을 고치는 방법?PHP 스크립트가 crontab에서 비정상적으로 멈 춥니 다
function update_mt_image_inventory($db, $from)
{
$current_img_id = htmlentities($_SERVER['argv'][1], ENT_QUOTES);
if(!$current_img_id) $current_img_id = 999999999;
$interier = 250;
$sql = "SELECT im.IMG_ID, im.IMG_FILENAME, im.SEAL_NUMBER , im.XXX FROM `mt_images` im WHERE im.IMG_ID < {$current_img_id} AND im.ACT_FLG = 1 ORDER BY im.IMG_ID DESC LIMIT {$from}, {$interier}";
$re_check = @$db->sql_query($sql);
if(@mysql_num_rows($re_check) > 0) {
while($row = $db->sql_fetchrow($re_check)) {
$img_id = $row['IMG_ID'];
$current_img_id = $img_id;:q!
$inventory = $row['XXX'];
$sql = "SELECT USER_ID FROM tr_lines_alls WHERE IMG_ID = {$img_id} AND ACT_FLG = 1";
$img_res = @$db->sql_query($sql);
$img_count = @mysql_num_rows($img_res) ;
if($img_count != $inventory && $img_id>0){
$sql = "UPDATE mt_images SET XXX = {$img_count} WHERE IMG_ID = {$img_id}";
@$db->sql_query($sql);
$data = "{$img_id} | {$inventory} | {$img_count}";
echo $data."\n";
if($img_count>0) writeLog($data);
}
@mysql_free_result($img_res);
unset($img_res);
}
@mysql_free_result($re_check);
unset($re_check);
echo "Checking next {$interier}/{$from} - Current: {$current_img_id} - Memory: ".memory_get_usage(false)."\n";
if($from%5000 ==0){
echo date("h:i:s")." --> 5000 records passed.\n";
}
update_mt_image_inventory($db, $from + $interier);
} else {
writeLog("mt_images finished");
}
}
우선'@'을 어디에서나 제거하십시오. – sanmai
어쩌면 당신은 cron의 출력을 파일 안에 저장할 수 있습니다. @ sanmai의 의견에'1 * * * * php myscript.php> output.log' – pleasedontbelong
+1과 같은 PHP 오류가 있는지 확인하십시오. '@'는 오류 메시지를 표시하지 않으므로 스크립트가 자동으로 중단 될 수 있습니다. – J0HN