Можно ли вызвать функцию, когда процесс cron убит из командной строки (через Ctrl + c) или с помощью команды kill?
Я попытался register_shutdown_function()
, но, похоже, он не вызывается, когда скрипт убит, но вызывает вызов, когда сценарий заканчивается нормально.
Я пытаюсь записать результат в файл и обновить значение базы данных, когда экземпляр cron автоматически убит (т. Е. Работает слишком долго).
Согласно комментарию в руководстве по register_shutdown_function()
, это можно сделать следующим образом:
При использовании CLI (и, возможно, командной строки без CLI – я его не тестировал) функция shutdown не вызывается, если процесс получает SIGINT или SIGTERM. только естественный выход PHP вызывает функцию выключения. Чтобы преодолеть проблему, скомпилируйте интерпретатор командной строки с помощью
--enable-pcntl
и добавьте этот код:<?php declare(ticks = 1); // enable signal handling function sigint() { exit; } pcntl_signal(SIGINT, 'sigint'); pcntl_signal(SIGTERM, 'sigint'); ?>
Таким образом, когда процесс получает один из этих сигналов, он выходит из нормального состояния и вызывается функция выключения. … (аббревиатура, чтобы сэкономить место, прочитайте полный текст)
Если это слишком много хлопот, я бы подумал о том, чтобы сделать тайм-аут из PHP, установив для этого время. Достижение предела вызовет фатальную ошибку, и функция выключения будет вызвана нормально.