gpt4 book ai didi

php - 在后台连续运行Php脚本

转载 作者:行者123 更新时间:2023-12-03 12:04:01 24 4
gpt4 key购买 nike

我已经编写了server.php来接受来自客户端的通过TCP套接字的连接。
我有用

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脚本会在几个小时后结束。因为我需要在后台运行脚本,直到我手动将其停止。
可能是什么问题?
提前致谢

最佳答案

您应该清楚地了解,而不应该将php用于此类事情。 PHP脚本运行,完成某些工作并消亡-这就是它的命运。而且您在php上创建的任何恶魔都会由于某种原因而死亡。

但是在php上创建恶魔很容易。那我们该怎么办呢?

对于恶魔脚本,您应该实现主管。

首先,如上所述,您拥有自己的脚本。有时对此脚本实现一些中断条件很有用,例如通过memory_get_usage限制进程内存

其次,为恶魔实现主管脚本。那是什么东西?简单来说,您应该从cron每隔1分钟调用一些脚本。该脚本将:

  • 检查您的恶魔脚本是否仍在运行。当前通过 shell 运行的进程可用于此目的
  • 如果您的恶魔已终止,请运行另一个实例。
  • 退出

  • 主管的概念非常有用。您可以在那里实现任何业务逻辑,例如准确运行恶魔实例的数量。对于像RabbitMQ使用者这样的脚本来说真是太棒了。

    关于php - 在后台连续运行Php脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244686/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com