Перезагрузите PHP-файл в командной строке PHP-CLI - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть один PHP-файл, подобный приведенному ниже, который я запускаю в командной строке, используя приведенную ниже команду

php myfile.php

, и он работает нормально.Я хочу, чтобы он продолжал работать круглосуточно и без выходных, но иногда, если возникает какая-либо ошибка, она перестает работать, поэтому я хочу перезагрузить файл в той же командной строке.Я использую его в centos, и я хочу видеть результат в командной строке, поэтому Cron Job мне не нужен.Я хочу поставить код, который может остановить запуск файла и запустить его снова.

<?php

ini_set('memory_limit', '-1');
set_time_limit(0);
require_once ('src/whats.class.php');
$starttime = time();
global $w;
connectwa();


function onGetMessage($object)
{
    global $w;
    $message = $object->getMessage();
    $contact = explode("@", $object->getFrom()) [0];
    $type = "You have sent *Simple Text* Message.";
    sendMessage($contact, $type, $message);
}


function connectwa() {
    global $w;
    $wait = mt_rand(10, 15);
    global $waittime;
    $waittime = $wait*60;
    echo $waittime;
    $log = false;
    $debug = false;
    $nickname = 'Number1';
    $username = 'Your Number will be Here';
    $password = 'Your Password will be here';
    $w = new Whats($username, $nickname, $debug, $log);
    $w->eventManager()->bind('onGetMessage', 'onGetMessage');

    try {
        $w->connect();
    }
    catch(Exception $e) {
        echo 'Connection error: ' . $e->getMessage();
        exit(0);
    }

    try {
        $w->loginWithPassword($password);
    }
    catch(Exception $e) {
        echo 'Login error: ' . $e->getMessage();
        exit(0);
    }
    echo "connected \n";
}

while (1) {
    try {
        $w->pollMessage();

        if (time() - $starttime > $waittime) {
            echo "Disconnecting\n";
            $starttime = time();
            $w->disconnect();
        }
    }
    catch(Exception $e) {
    }

    if (!$w->isConnected()) {
        echo "disconnected\n";
        system('clear');
        connectwa();
    }
}
?>

Я могу очистить результат команды, используя приведенный ниже код в php

system('clear');

, дайте мне знать, подобный кодкоторый может перезагрузить мой текущий файл.Спасибо

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я делал это несколько раз, чтобы поддерживать выполнение скрипта PHP и обеспечивать его повторный запуск при выходе.Более важно иметь возможность замедлить работу, если они начнут убегать с неперехваченными ошибками.В PHP 7+ перехват самого базового исключения (\Throwable гарантирует, что все исключения, которые могут быть сгенерированы, будут перехвачены).

#!/bin/bash

nice php -q -f ./myfile.php -- $@
exec $0 $@

Все параметры, переданные в сценарий оболочки, передаются в PHPсценария, и когда файл PHP завершается, сценарий оболочки перезапускается сам (не рекурсивно, он заменяет себя) для повторного запуска.Внутри PHP-скрипта вы можете зацикливать сколько угодно, но поскольку перезапуск очень простой и быстрый, я мог бы сделать 50-100 циклов, прежде чем намеренно выйти, чтобы что-то очистить.сценарий с некоторыми опциями, с которыми я могу общаться exit $n;:

#!/bin/bash

# a shell script that keeps looping until an exit code is given
# if it does an exit(0), restart after a second - or if it's a declared error
# if we've restarted in a planned fashion, we don't bother with any pause
# and for one particular code, exit the script entirely.
# The numbers 97, 98, 99 must match what is returned from the PHP script

nice php -q -f ./cli-beanstalk-worker.php -- $@
ERR=$?

## Possibilities
# 97    - planned pause/restart `exit 97;`
# 98    - planned restart (immediate, no sleep)
# 99    - planned stop, exit.
# 0     - unplanned restart (as returned by "exit;" or exceptions)
#        - Anything else is also unplanned paused/restart

if [ $ERR -eq 97 ]
then
   # a planned pause, then restart
   echo "97: PLANNED_PAUSE - wait 2";
   sleep 2;
   exec $0 $@;
fi
# ... other choices to potentially pause, or exit the shell script

# unplanned exit, pause, and restart
echo "unplanned restart: err:" $ERR;
echo "sleeping for 5 secs"
sleep 5

# rerun this shell script, replacing itself
exec $0 $@
0 голосов
/ 13 декабря 2018

Используйте блок try / catch внутри цикла while.Таким образом, скрипт не сломается при ошибке или исключении.Вы также можете использовать блок catch для регистрации ваших ошибок.И сценарий будет работать вечно.

ПРИМЕЧАНИЕ

Если это общий хостинг / сервер, применение ограничения по времени может не повлиять.И скрипт сломается через определенное количество времени.Но я надеюсь, что вы делаете это на своем персональном / выделенном сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...