Я написал server.php, чтобы принимать соединение от клиента через tcp socket. и у меня есть использоватьЗапустите Php Script на фоне фона
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, если ваш скрипт все еще работает, и перезапускать его, если нет. –
Возможно, через некоторое время соединение db было закрыто, а выполнение скрипта остановлено или у вас закончилась нехватка памяти. Сначала проверьте подключение. –
@FranzGleichmann, используя файл вместо/dev/null, создает огромный файл около 20 гб всего за один день. поэтому я использую/dev/null –