Domanda

C'è un modo per iniziare uno script da un altro processo, in modo che se il processo muore / estremità, lo script continua ancora?

Sarà setuid fare questo? Se dovessi impostare il proprietario a root, e quindi avviare lo script?

Per esempio, se ho qualche codice PHP di iniziare uno script, ma httpd muore o viene ucciso, penso che ci vuole il mio script con esso. C'è un modo per aggirare questo?

In particolare, sono in Fedora 10 con Apache 2 e PHP 5.

È stato utile?

Soluzione

qui :

function become_daemon() 
{
    $child = pcntl_fork();
    if($child) {
        exit; // kill parent
    }
    posix_setsid(); // become session leader
}

Inoltre, è una buona idea per chiudere STDIN, STDOUT e STDERR ma non sono sicuro come fare in PHP.

Altri suggerimenti

Prova "nohup yourscript.sh &"

È possibile utilizzare la "rinnegare" built-in in bash per staccare un lavoro dalla shell che ha generato esso. Vedere: http://www.faqs.org/docs/bashman/bashref_79.html

Si dovrebbe usare pcntl_fork di PHP () (come raccomandato da @bmdhacks).

Il processo di base è, forchetta, setsid, forchetta di nuovo, chdir a /, e chiudere tutti i descrittori di file aperti. La pratica standard impone inoltre di creare un file chiamato /var/run/$NAME, (dove $ NOME è il nome del demone), e scrivere il PID a quel file, in modo da poter controllare l'esecuzione del processo in seguito.

Io non sono un programmatore php, ma questo è normale roba * nix. Il miglior esempio php posso Google guarda come questo ciao-mondo-daemon-con-forchetta Ma, non cambia la sua directory di lavoro a '/', né sembra chiuse descrittori di file aperti (non sono sicuro di come avrebbe funzionato in php), in modo che non è collegato al stdin, stdout, e stderr del processo originale.

ho scavato un po 'di più, e ha trovato un altro articolo che può aiutare con PHP pcntl_fork ()

E, sembra che ci sia un modulo chiamato pera System_Daemon , che gestisce questo per voi (L'ho trovato attraverso qui ).

Dal comando di shell è possibile aggiungere una e commerciale (&) alla fine della riga di comando per lanciare il comando in background, che si stacca dalla shell.

Alcune buone informazioni qui: http: //www.linuxforums. org / forum / linux-programmazione-scripting / 50096-movimento-processi-background-foreground.html

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