私はtcpソケットを通してクライアントからの接続を受け入れるためにserver.phpを書いています。 と私はバックグラウンドでPHPスクリプトを実行する
set_time_limit(0);
include_once("include/class.db.php");
while (true)
{
receive_message('x.x.x.x','8855',50);
}
function receive_message($ipServer,$portNumber,$nbSecondsIdle)
{
// creating the socket...
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);
if (!$socket)
{
echo "$errstr ($errno)<br />\n";
}
else
{
// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.
while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))
{
$message= fread($conn, 1024);
if($message!=''){
echo 'I have received that : '.$message;
// insert into database
$sql = "insert into `data_log` (`id`,`message_text`) values (NULL,'$message')";
$query=mysql_query($sql) or die(mysql_error() . "<br>" . $sql);
}
fputs ($conn, "OK\n");
fclose ($conn);
}
fclose($socket);
}
}
を使用し、私は、バックグラウンドでサーバーを実行するために
nohup php server.php >/dev/null 2>&1 &
を実行しました。それはすべて正常に動作します。しかし、ソケットは数時間後に自動的に閉じたり、数時間後にPHPスクリプトが終了すると言うことができます。手動で停止するまで、私の必要性はバックグラウンドでスクリプトを実行することです。 何が問題なのですか? ありがとうございます
でも、プログラム出力を/ dev/nullではなくログファイルにパイプしてトラブルシューティングを開始できます。予備的な手段として、毎回cronjobをチェックしてスクリプトがまだ実行中であるかどうかをチェックし、そうでない場合はcronjobを再起動することができます。 –
おそらくしばらくしてdb接続が閉じられ、スクリプトの実行が停止したか、メモリが不足している可能性があります。最初に接続を確認してください。 –
@FranzGleichmannは、/ dev/nullの代わりにファイルを使用すると、1日で約20GBの膨大なファイルが作成されます。だから私は/ dev/nullを使用して –