Sono nuovo ai daemons, quindi mi scuso se questa è una domanda per principianti.Come si configura un demone con python-daemon?
In molti altri risposte (per esempio, this question) la gente ha suggerito il pacchetto python-daemon era la strada da percorrere perché implementa pienamente lo standard PEP 3143.
Purtroppo, python-daemon è a bit light on documentation (o più probabilmente sono un po 'leggero sulla conoscenza/esperienza ...;)), e penso che probabilmente manchi qualcosa di veramente semplice. Ecco quello che sto facendo:
Ho il seguente:
import daemon
logfile = open('daemon.log', 'w')
context = daemon.DaemonContext(stdout = logfile, stderr = logfile)
context.open()
with context:
do_something_1()
do_something_2()
Domanda: Come faccio a impostare un demone con python-daemon, come posso avviarlo e fermarlo?
note collaterali:
praticamente sto prendendo un ipotesi su come/se il metodo .open()
deve essere utilizzato qui - documenti non erano reali chiaro su questo punto. La stessa cosa sembra accadere sia che la includa o no.
Quindi, ora cosa devo fare? Quando cerco di eseguire questo file, ad esempio:
python startConsumerDaemons.py
sembra correre do_something_1()
, ma non il secondo. E sembra lasciare il programma allegato alla finestra del terminale. IE, lo stdout non viene reindirizzato e quando chiudo la finestra del terminale il processo viene ucciso. Quindi, sono abbastanza sicuro che sto facendo qualcosa di sbagliato qui ... cosa dovrei fare in modo diverso?
E, infine, una volta eseguito il daemon, come posso arrestarlo/riavviarlo (ad esempio se apporto modifiche al codice sottostante)?
Qual è l'ultimo 'with' dovuto fare?(i moduli verranno eseguiti quando vengono importati per la prima volta, a meno che manchi qualcosa, quelle ultime istruzioni non faranno nulla) E cosa intendi con "esegui il primo script ma non il secondo"? Se non è stata sollevata alcuna eccezione, sono abbastanza fiducioso che entrambi sono stati eseguiti con successo. – mgibsonbr
Non so cosa intendi per "ultimo" con (ce n'è solo uno), ma nel codice di esempio per python-daemon, mette lo script da eseguire come daemon all'interno di una dichiarazione simile (http: // www.python.org/dev/peps/pep-3143/). Il primo script viene eseguito ed è in grado di ricevere/elaborare messaggi (è un consumatore su un broker MQ). Perché il primo è su un loop infinito, forse lo script startConsumerDaemons non arriva mai al secondo? – CQP
L'esempio che hai postato ** importa ** alcuni metodi da un altro file ('initial_program_setup',' do_main_program', ecc.) E ** li chiama ** ('do_main_program()'), uno di questi all'interno dell'istruzione 'with' . A meno che non ci sia qualche caratteristica oscura di Python che non conosco, sono sicuro che quelle dichiarazioni non faranno nulla. Ad ogni modo, per quanto ho potuto capire, 'python-daemon' trasforma il programma attualmente in esecuzione in un processo daemon UNIX, non crea nuovi processi o nuovi thread. Se una parte del programma entra nel ciclo infinito, le parti successive non verranno eseguite affatto. – mgibsonbr