PHP также может напрямую запустить и прекратить процесс демон. По сравнению с оболочкой гораздо проще и удобнее понять. Конечно, если Daemon PHP необходимо автоматически перезапустить, это все равно зависит от графика Crontab оболочки. Выполните скрипт время от времени, чтобы увидеть, нужно ли перезапустить сценарий. При необходимости убейте процесс и удалите файл RunFile, перезапустите и запишите PID в файле RunFile.
Кода -копия выглядит следующим образом:
<? Php
function start ($ file) {
$ path = dirname (__ файл __). '/';
$ runfile = $ path. $ file. '. run';
$ diefile = $ path. $ file. '. Die';
$ file = $ path. "data/{$ file} .php";
clearStatCache ();
if (file_exists ($ runfile)) {
$ oldpid = file_get_contents ($ runfile);
$ nowpid = shell_exec ("ps aux | grep 'php -f process.php' | grep $ {oldpid} | awk '{print $ 2}'");
// Если номер PID в runfile может соответствовать использованию работает, и разница между последним выходом на доступ к Runfile и текущей разницей меньше 5 минут, а затем верните
if (($ oldpid == $ nowpid) && (time () - fileatime ($ runfile) <300)) {
Echo "$ file - это круга, не работает" нет ";
возвращаться;
}еще{
// номер PID не соответствует или оператор LOOP не был запущен в течение 300 секунд. Просто убейте процесс и перезапустите его
$ pid = file_get_contents ($ runfile);
shell_exec ("ps aux | grep 'php -f process.php' | grep {$ pid} | xargs-if-no-un-empty kill");
}
}еще{
// Написать файл PID в файл запуска
if (! ($ newpid = getmypid ()) ||! file_put_contents ($ runfile, $ newpid)) {
возвращаться;
}
while (true) {
// Получают новый номер конечного процесса, прекратите процесс и удалите соответствующие файлы
if (file_exists ($ diefile) && unlink ($ runfile) && unlink ($ diefile)) {
возвращаться;
}
/*Это то, что Демон должен делать*//
file_put_contents ($ file, "Я сейчас работаю" .php_eol, file_append);
/**********************/
Touch ($ runfile);
сон (5);
}
}
}
start ("test");
Несколько пунктов, на которые обращает внимание при написании Демонов с HP:
1. Первое, что функция функция ClearStatCache (). Глядя на официальное руководство, вы можете знать, что функция очищает кеш состояния файла. При проверке статуса кэша одного и того же файла несколько раз в скрипте, ошибка возникнет, если функция не используется. Затронутыми функциями: stat (), lstat (), file_exists (), is_writeble (), is_readable (), is_executable (), is_file (), is_dir (), is_link (), filectime (), filetime (), fillemtime (), file -), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (), файл (). FilePerms ().
2. Когда сценарий запускается несколько раз, он будет обнаружен перед запуском. Расстояние времени последнего цикла в настоящее время превышает 300 -е годы, или номер ПИД не соответствует, будет перезапущено (время должно быть обновлено при каждом выполнении цикла).
3. Автоматический перезапуск также использует расписание Crontab, добавьте файл в расписание:
Кода -копия выглядит следующим образом:
crontab -e
#Open график, режим вставки
*/3 * * * */usr/bin/php -f process.php
#ExeCeate каждые 3 минуты, положите процесс, чтобы повесить
Это в основном в порядке. Если есть определенные функции, вам нужно изменить код.