PHP register_shutdown_function al fuoco quando uno script viene ucciso dalla riga di comando?
-
29-09-2019 - |
Domanda
E 'possibile richiamare una funzione quando un processo di cron viene ucciso dalla riga di comando (tramite CTRL + C) o con il comando kill?
ho provato register_shutdown_function()
, ma non sembra essere invocato quando lo script viene ucciso, ma venga invocato quando le estremità di script normalmente.
Sto cercando di registrare il risultato in un file e aggiornare un valore del database quando un'istanza di cron viene ucciso automaticamente (es. È in funzione troppo a lungo).
Soluzione
Secondo un href="http://www.php.net/manual/en/function.register-shutdown-function.php#26251" rel="noreferrer"> commento register_shutdown_function() , questo può essere fatto nel seguente modo:
Quando si utilizza CLI (e forse di comando linea senza CLI - non ho provato) la funzione di arresto non ottiene chiamato se il processo riceve un SIGINT o SIGTERM. solo l'uscita naturale di PHP chiama la funzione di spegnimento. Per superare il problema di compilazione del riga di comando interprete
--enable-pcntl
e aggiungere questo codice:<?php declare(ticks = 1); // enable signal handling function sigint() { exit; } pcntl_signal(SIGINT, 'sigint'); pcntl_signal(SIGTERM, 'sigint'); ?>
In questo modo quando il processo riceve un di tali segnali, si chiude normalmente, e la funzione di arresto viene chiamata. ... (abbreviando per risparmiare spazio, leggere il testo completo)
Se questo è troppo fastidio, vorrei prendere in considerazione facendo il timeout dall'interno PHP fissando un limite di tempo, invece. Raggiungendo il limite getterà un errore fatale, e la funzione di spegnimento dovrebbe ottenere chiamato normalmente.