쉘에서 실행할때 프로세스(pid) 저장후 재시작(restart) 할때 kill(종료) 시키기
PHP프로그램을 웹서버를 통해 실행 시키는 것이 아니라 리눅스 쉘에서 실행 시킬때 현재의 프로세스ID(pid)를 저장해 두었다가 다시 실행 할때 해당 프로세스 ID를 무조건 kill 시킨 다음 진행하는 프로그램 입니다. 간혹 종료 되지 않고 남아 있는 경우가 있을 경우 유용합니다.
$_NOW_PRG = basename(__FILE__);
$_NOW_PRG = str_replace('.php', '', $_NOW_PRG);
$pid_fname = "$_PID_/" . "{$_NOW_PRG}_$MODE.pid";
// echo $pid_fname . "\n"; exit;
// 시작은 무조건 restart로 한다.
$STATUS = 'restart';
if( ($STATUS == 'stop' || $STATUS == 'restart' ) && is_file($pid_fname) )
{
$pid_no = file_get_contents($pid_fname);
if ( is_numeric($pid_no) ) {
$rExec = shell_exec("/bin/kill $pid_no");
$rUnlink = unlink($pid_fname);
}
echo date('Y-m-d H:i:s ') . "STATUS: $STATUS -> $rExec / $rUnlink: $pid_fname \n";
}
# stop를 쉽게 할 수 있도록 로그를 남긴다.
if( $STATUS == 'restart' )
{
$mypid = getmypid();
$wrtSize = file_put_contents($pid_fname, $mypid);
echo date('Y-m-d H:i:s ') . "STATUS: $STATUS -> $mypid / $wrtSize:$pid_fname / HOST_NAME:$HOST_NAME \n";
}
if( $STATUS == 'stop' ) {
echo date('Y-m-d H:i:s ') . "end ... \n";
exit;
}
# 유저를 변경해 줘야 되는 경우
// chown($pid_fname, 'users');
// chgrp($pid_fname, 'users');
위는 start 없이 무조건 restart 하는것으로 했는데요. 쉘에서 프로그램 실행 할 때 프로세스(pid) 저장 후 재시작(restart) 할 때 kill(종료) 시키는 상황에 따라 프로그램을 약간 수정하여 사용하면 됩니다.