0

如果我编写一个带有 sleep 语句的 Bash shell 程序,我可以执行以下操作来检查它的状态:

ps aux | grep sleep

如果我长时间出现休眠,比如在 PHP 中 10 分钟尝试查看网络连接是否可用,我无法确定程序是否有问题或它是否正确执行了休眠功能.

我正在考虑的一种方法是将带有时间戳的睡眠状态写入日志文件。但是我想知道是否可以写出这个状态,所以它会显示在做一个 'ps aux | grep sleep' 表示这个 php 程序正在运行,此时正在休眠。

或者有更好的方法和方法吗?谢谢!

4

2 回答 2

0

也许创建一个 sleep-php.sh 然后使用 bash 命令执行它,我认为它是source sleep-php.sh. 然后,您可以使用 grep 查找 sleep-php.sh,而不必冒险将其与意外运行的不同 sleep 命令混淆。

您甚至可以更进一步并动态创建“sleep-php-$id.sh”,以便您可以在睡眠中包含更多信息,这里以 id 为例。

于 2013-05-22T09:30:54.940 回答
0

恕我直言,最好的方法不是将您的跟踪器/记录器放在操作系统的较低级别,而是放在 PHP 本身中。

我的建议是编写一个 PHP 循环,尝试次数有限,尝试之间的等待时间更短,这样您就可以记录每个循环,以及每个循环的网络连接轮询结果。获得连接网络后,立即中断循环。如果循环结束且未获得网络访问权限,则发出相关消息/业务操作。

define("MAX_ATTEMPT_COUNT", 10);
define("WAITING_TIME", 60);

$NetworkAccess = false;

$fd = fopen("netpoll.log", 'a');
if (!$fd) die("I thought I could open netpoll.log but I can't.");

for($i=1; $i<=MAX_ATTEMPT_COUNT; $i++) {
    fwrite($fd, "Entering loop #" . $i);

    $NetworkAccess |= pollNetwork(); // can be |= or simply =

    if ($NetworkAccess) {
        fwrite($fd, "network access acquired, exiting loop.");
        break;
    }

    fwrite($fd, "No cigar, I'll try again in " . WAITING_TIME . " seconds.");
    sleep(WAITING_TIME);
} 

if(!$NetworkAccess) {
    fwrite($fd, "No network access after " . MAX_ATTEMPT_COUNT*WAITING_TIME . " seconds, giving up.");
}

fclose($fd);
于 2017-12-14T03:24:21.843 回答