PHP register_shutdown_function для запуска, когда скрипт убит из командной строки? - PullRequest
11 голосов
/ 12 октября 2010

Можно ли вызвать функцию, когда процесс cron убит из командной строки (через Ctrl + c) или с помощью команды kill?

Я пробовал register_shutdown_function(), но, кажется, он не вызывается, когда сценарий убит, но вызывается, когда сценарий заканчивается нормально.

Я пытаюсь записать результат в файл и обновить значение базы данных, когда экземпляр cron автоматически уничтожается (т. Е. Выполняется слишком долго).

1 Ответ

14 голосов
/ 12 октября 2010

Согласно комментарию в руководстве по register_shutdown_function(), это можно сделать следующим образом:

При использовании CLI (и, возможно, командной строки без CLI - Iне проверял) функция выключения не вызывается, если процесс получает SIGINT или SIGTERM.только естественный выход PHP вызывает функцию выключения.Чтобы решить эту проблему, скомпилируйте интерпретатор командной строки с помощью --enable-pcntl и добавьте следующий код:

 <?php
 declare(ticks = 1); // enable signal handling
 function sigint()  { 
    exit;  
 }  
 pcntl_signal(SIGINT, 'sigint');  
 pcntl_signal(SIGTERM, 'sigint');  
 ?>

Таким образом, когда процесс получает один из этих сигналов, он обычно завершает работу и вызывается функция завершения работы.... (сокращенно для экономии места, прочитайте полный текст)

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

...