2011-10-18 24 views
7

Ho visto molti script per demonizzare uno script python in linux, ma non molte informazioni su come usarli. Qualcuno potrebbe guidarmi su questo?Demonizzare uno script python in debian usando virtualenv

Attualmente ho un lungo script python che ascolta un socket per un messaggio in arrivo, se è il formato corretto lo accetta e quindi lo memorizza nel database. Lo script stesso apre solo il socket e poi ascolta un po 'vero (che fa il lavoro!) E fa tutto il lavoro lì dentro.

Per demonizzarlo, dovrei modificare il mio script corrente o chiamarlo da uno script separato? Ho visto esempi di entrambi, ma non ho neanche avuto modo di lavorare.

Inoltre, sto usando virtualenv quale potrebbe essere la radice dei miei problemi, qualche suggerimento sull'utilizzo di questo con script demonizzati?

+0

un daemon è solo un programma/script che viene eseguito costantemente fino a quando si verifica un evento e se non si verifica alcun evento (o è in coda), verrà sospeso per un periodo di tempo ... quindi ripetere .... Cosa stai facendo IS quello che fa un demone. Stai chiedendo di avviarlo con l'ambiente in modo che sia sempre in esecuzione? – g19fanatic

+0

Ho bisogno di varie cose che sono installate in virtualenv per essere usate dallo script. Penso che questo sia il motivo per cui non ho ancora funzionato. Inoltre, come faccio a sapere che è in esecuzione? Ho letto sulla chiamata di 'ps aux' per mostrare una lista ma non riesco a vederla lì. –

risposta

5

Creare uno script di shell che attiva l'ambiente virtuale ed esegue lo script Python in background.

Inoltre, ci dovrebbe essere un modulo python nell'ambiente virtuale che è possibile importare e attivare anche l'ambiente. Al momento non ho virtualenv funzionante, quindi non posso controllare dove si trova, ma cercare activate (o qualcosa di simile) nell'ambiente virtuale e dovresti trovarlo.

Edit: Aggiunto uno script init.d Debian minimale

Lo script minimo assoluto necessario per avviare un daemon all'avvio del computer, è questo:

#!/bin/sh 
/path/to/program & 

Il & fa girare il programma di in background, quindi non interromperà il resto del processo di avvio.

Per uno script più completo, copiare /etc/init.d/skeleton e modificare il nuovo file. La parte importante da modificare è il blocco all'inizio (tra ### BEGIN INIT INFO e ### END INIT INFO, utilizzato dal programma update-rc.d) e le variabili NAME, DAEMON e DAEMON_ARGS. Spero che questo dovrebbe essere tutto ciò che è necessario per creare uno script di avvio.

Attivare lo script come questo:

sudo update-rc.d <name of script> defaults 
sudo update-rc.d <name of script> enable 

E per avviarlo:

sudo update-rc.d <name of script> start 

Il <name of script> è solo il nome, non il percorso completo.

+0

Ho il file di attivazione sì, quindi scrivo uno script di bash? Come faccio a demonizzarlo? –

+0

@ ing0: Forse intendi come scrivere uno script che viene avviato all'avvio del computer, come tutti gli altri programmi in /etc/init.d? Quindi dipende un po 'da quale distribuzione Linux usi. Prova 'man update-rc.d', se esiste la pagina di manuale dovrebbe contenere dei puntatori su come farlo. Prova anche google per 'script di avvio _linuxdist_'. –

+0

Attualmente utilizzando una variante di debian, tutto il materiale che ho trovato online fornisce un codice come questo: http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/ È di questo tipo di codice non richiesto? –

5
script 
    export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/ 
    exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 & 
end script 

Quando è necessario eseguire un'applicazione in un virtualenv pitone, è possibile 'Attiva' la virtualenv, o utilizzare unico comando che di ambiente python.

Secondo il sito Web "Se si esegue direttamente uno script o l'interprete python dalla directory bin/virtualenv (ad esempio percorso/su/env/bin/pip o/percorso/su/env/bin/python script.py) non è necessario l'attivazione. " - http://pypi.python.org/pypi/virtualenv

Ho anche alcuni moduli Python che sono stati compilati dal sorgente. Questi devono essere nella variabile di ambiente PYTHONPATH.Questo potrebbe essere parte della tua attivazione virtualenv, fatto con virtualwrapper, o esplicitamente chiamato (come faccio qui sotto)

Anche chiamare il programma da un lavoro UPSTART. Il mio esempio è sopra.

Su un'istanza di Ubuntu 10.10 su Amazon EC2, ho avuto più fortuna con il comando start-stop-daemon. Ho anche faticato con alcune delle altre "stronze". Sto chiamando un'applicazione python con una virtualenv specifica e alcuni parametri al mio programma eseguito.

+0

Avete degli script di esempio (shell e/o python) che funzionano con upstart? Lei cita "l'esempio è sotto". – hobs

Problemi correlati