PHP register_shutdown_function al fuoco quando uno script viene ucciso dalla riga di comando?

StackOverflow https://stackoverflow.com/questions/3909798

  •  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).

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top