PHP: Как написать сообщение, которое будет отображаться в команде «ps»?

Если я пишу программу оболочки Bash с оператором сна, я могу сделать следующее, чтобы проверить ее статус:

ps aux | grep sleep

Если у меня сон происходит в течение длительного периода времени, например, 10 минут в PHP, чтобы попытаться увидеть, доступно ли сетевое соединение, я не могу определить, возникла ли у программы проблема или она правильно выполняет функцию сна. .

Один из способов, о котором я подумал, заключался в том, чтобы записать состояние сна с отметкой времени в файл журнала. Но я задавался вопросом, возможно ли и практично ли иметь возможность написать этот статус, чтобы он отображался с выполнением 'ps aux | grep sleep', что это работающее php-программирование в данный момент спит.

Или есть лучший метод и подход к этому? Спасибо!


person Edward    schedule 22.05.2013    source источник
comment
что этот таинственный php-скрипт должен делать?   -  person    schedule 22.05.2013


Ответы (2)


Возможно, создайте sleep-php.sh, а затем выполните его с помощью команды bash, я думаю, что это source sleep-php.sh. Затем вы можете найти sleep-php.sh, не рискуя перепутать его с другой командой сна, которая запускается случайно.

Вы даже можете пойти дальше и динамически создать «sleep-php-$id.sh», чтобы вы могли включить больше информации о сне, например, здесь id.

person Adder    schedule 22.05.2013

ИМХО, лучший подход - не размещать свой трекер/логгер на более низком уровне ОС, а в самом 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);
person Fabien Haddadi    schedule 14.12.2017