2015-06-09 9 views
5

Ho uno script Python che elabora i dati da un flusso di dati HTTP e ho bisogno che questo script in teoria sia in esecuzione in ogni momento e sempre, a meno che non lo uccida manualmente per aggiornarlo ed eseguirlo di nuovo.Unix: lo script di Python ha costantemente eseguito le best practice?

Mi chiedevo quale fosse la procedura migliore per farlo in un sistema Unix (in particolare Ubuntu) in modo che, anche se Terminale fosse chiuso, lo script continuasse a essere eseguito in background a meno che il processo o il server non venissero chiusi?

Grazie

+0

vi suggerisco di dare un'occhiata a Cron. –

+0

quindi se si blocca vuoi riavviare sì? Penso che l'upstart sarebbe un buon approccio http://upstart.ubuntu.com/cookbook/ –

+0

Oppure Supervisor: http://supervisord.org/ – RemcoGerlich

risposta

1

io non sono sicuro di come "best practice" questo non è che si potrebbe fare:

aggiungere il programma: /etc/rc.d/rc.local

Questo il programma verrà eseguito all'avvio.

Se si aggiunge un '&' alla fine della riga verrà eseguito in background.

Se non si desidera eseguire il programma manualmente (non all'avvio) è possibile passare a un altro tty premendo ctrl + alt + f1, (questo apre tty1 e funzionerà con f1 - f6) quindi eseguire il comando. Questo terminale non deve essere aperto in una finestra, quindi non devi preoccuparti che si chiuda. Per tornare al desktop usa ctrl + alt + f7.

1

Si tratta di un ciclo infinito. È possibile avviare lo script all'avvio e verrà eseguito per sempre finché non si interrompe il processo stesso o si spegne il computer.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import time 

while True: 
    print 'Hello' 
    time.sleep(2) # 2 second delay 
6

Dalla tua domanda si stanno implicando che si sta per avviare lo script dal vostro terminale e non con uno dei metodi di gestione script di avvio di Linux come script systemd o parvenu o init.d.

Se avete intenzione di avviare lo script da terminale, e lo si vuole continuare a correre dopo la chiusura del terminale, è necessario fare due cose

1. farlo girare in background aggiungendo '&' dopo il tuo copione

2. Quando si chiude il terminale, la shell associata ad esso invia il segnale HUP a tutti i processi prima che muoia. Per ignorare il segnale HUP e continuare a funzionare in background è necessario avviare lo script con 'nohup'.

tl; dr
eseguire lo script in questo modo:

$ nohup python mypythonscript.py &