2009-02-22 16 views
9

Sto provando a eseguire uno script php sul mio server virtuale privato remoto tramite la riga di comando. Il processo seguo è:Come eseguire uno script php tramite la riga di comando (e tenerlo in esecuzione dopo la disconnessione)

  1. Accedere al server utilizzando PuTTY
  2. Al prompt dei comandi, digitare> php myscript.php

Lo script viene eseguito bene. MA IL PROBLEMA è che lo script si interrompe non appena chiudo la finestra della console PuTTY.

Ho bisogno che la sceneggiatura continui a girare all'infinito. Come lo posso fare? Sto facendo funzionare Debian sul server.

Grazie in anticipo.

risposta

16

Credo che Ben abbia la risposta corretta, ovvero utilizzare il comando nohup. nohup sta per nohangup e significa che il tuo programma dovrebbe ignorare un segnale di disconnessione, generato quando la sessione di masticazione viene disconnessa o dal logout o dal timeout.

È necessario essere consapevoli che l'output del comando verrà aggiunto a un file nella directory corrente denominato nohup.out (o $ HOME/nohup.out se le autorizzazioni impediscono di creare nohup.out nella directory corrente). Se il tuo programma genera molto output, questo file può diventare molto grande, in alternativa puoi usare il reindirizzamento della shell per reindirizzare l'output dello script su un altro file.

nohup php myscript.php >myscript.output 2>&1 & 

Questo comando verrà eseguito lo script e inviare tutti gli output (sia standard che errore) al file myscript.output che verrà creato di nuovo ogni volta che si esegue il programma.

L'ultimo & causa l'esecuzione dello script in background in modo da poter eseguire altre operazioni mentre è in esecuzione o in uscita.

9

Un modo semplice è quello di eseguire, però nohup:

nohup php myScript.php & 
+1

Tuttavia, tenere presente che lo script non si riavvia automaticamente dopo la chiusura. –

4

Se si esegue il comando php in un screen, staccare la screen, allora non terminerà quando si chiude la console.

Screen è un multiplexer terminale che consente di gestire molti processi attraverso un terminale fisico. Ogni processo ha la sua finestra virtuale e puoi rimbalzare tra finestre virtuali che interagiscono con ogni processo. I processi gestiti dallo schermo continuano a essere eseguiti quando la loro finestra non è attiva.

+0

Avevo fatto lo stesso come avevi detto ma al momento non so perché il mio script ferma l'esecuzione sullo schermo. Una volta che uscirò dallo schermo e lo metto di nuovo sullo schermo, allora funziona bene quindi hai qualche idea su quale sia la ragione principale dietro a questo –