2012-01-04 31 views
51

Sto provando a eseguire uno script python utilizzando il crontab di Linux, ma ho trovato molte soluzioni e nessuna di esse funziona. Ad esempio: modifica l'anacron su /etc/cron.d o usa crontab -e.Esegui script python su Crontab

Voglio eseguire questo script ogni 10 minuti.

Quale file devo modificare per configurarlo?

Grazie in anticipo

EDIT

ho messo questa riga alla fine del file, ma non cambia nulla. Devo riavviare qualsiasi servizio?

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py 

EDIT [2]

Ragazzi, ho seguito il codice sorgente. C'è forse un problema qui, ma quando eseguo manualmente, funziona:

http://pastebin.com/qsWHNzqT

+0

Quando si dice "non cambia nulla". Mostra un errore, non funziona? Qual è il comportamento? –

+0

è "Documets" invece di "Documents" intenzionale? –

+0

Semplicemente non succede nulla. :( – guisantogui

risposta

91

Basta usare crontab -e e seguire il tutorial qui:

http://adminschoice.com/crontab-quick-reference

sguardo al punto 3 per una guida su come specificare la frequenza.

base alle proprie esigenze, dovrebbe essere efficace:

*/10 * * * * /usr/bin/python script.py 
+1

Seguo questo tutorial, ma quando salvi il file appare un messaggio: "/tmp/crontab.JTQ0My/crontab":22: errati minuti errori nel file crontab, non è possibile installare. Vuoi riprovare la stessa modifica? (y/n) " se digito" y ", sono tornato alla modifica del file e se si digita" n "il file non viene salvato Aggiungo questa riga all'ultima riga del file: "/1 * * * */usr/bin/python script.py " – guisantogui

+0

@guisantogui c'è un punto nel tutorial che spiega che l'utilizzo di"/1 "potrebbe non essere supportato da tutti i sistemi operativi. on? –

+3

@guisantogui ha appena notato che manca un "*" prima del "/" –

46

inserire lo script in un file foo.py partendo

#!/usr/bin/python 

poi dare i permessi di esecuzione a quello script utilizzando

chmod a+x foo.py 

e utilizzare il percorso completo del file foo.py e nel tuo crontab.

vedere la documentazione di execve(2) che sta gestendo la shebang

+0

è #!/Bin/sh valido per gli script di shell? – Tomer

7

Come avete accennato non cambia nulla,

In primo luogo, si dovrebbe reindirizzare sia lo stdin e stderr dall'esecuzione crontab come di seguito:

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py > /tmp/listener.log 2>&1 

quindi è possibile visualizzare il file /tmp/listener.log per vedere se lo script è stato eseguito come previsto.

In secondo luogo, indovinate un po 'si intende cambiato qualcosa è guardando i file creati dal programma:

f = file('counter', 'r+w') 
json_file = file('json_file_create_server.json','r+w') 

il lavoro crontab di cui sopra non creerà questi file nella directory /home/souza/Documets/Listener, come il lavoro cron è non eseguito in questa directory e si utilizza il percorso relativo nel programma. Quindi, per creare questi file nella directory /home/souza/Documets/Listener, il seguente lavoro cron farà il trucco:

*/2 * * * * cd /home/souza/Documets/Listener && /usr/bin/python listener.py > /tmp/listener.log 2>&1 

Passare alla directory di lavoro ed eseguire lo script da lì, quindi è possibile visualizzare i file creati in atto.

+0

cosa significa 2> & 1? –