1
1

Salve a tutti!

ho un piccolo problema con cron.

dovrei semplicemente avviare uno script python alle 15 tutti i giorni.

ma quanto pare la mia stringa aggiunta non rende l'effetto desiderato niente si avvia!

il procedimento che eseguo è questo:

crontab -e

aggiungo la stringa al file:

00 15 * * * python /home/alessio/myscript.py

salvo il tutto, e dopo controllo se il salvataggio è andato a buon fine:

alessio@alessio-notebook: crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

00 15 * * * python /home/alessio/myscript.py

ma nulla si avvia!

cosa sbaglio? qualcuno mi può dare un aiuto?:)

ringrazio anticipatamente!

chiesto 03 Set '14, 15:29

aleks1's gravatar image

aleks1
553410

modificato 03 Set '14, 15:32

1

@aleks1: sei sicuro che non si avvia, magari si avvia, ma non fa quello che ti aspetti. Cosa c'è nello script?
Hai già guardato nelle tre o quattro domande già presenti sull'argomento?

(03 Set '14, 15:56) enzotib ♦♦ enzotib's gravatar image
1

Aggiundo a quanto detto da @enzotib: se da dentro /home/alessio apri una finestra di terminale e digiti:

python myscript.py

lo script funziona?

(03 Set '14, 16:49) enzoge enzoge's gravatar image
1

Cron ha un environment ristretto, la variabile $PATH vale: "/usr/bin:/bin" quindi se python si trova in un direttorio diverso, lo devi indicare esplicitamente.

(03 Set '14, 17:07) letizia letizia's gravatar image

Sono d'accordo con @letizia, nel caso puoi impostare anche il path completo, sia di python che dello script, p.eg:

/usr/bin/python /home/alessio/myscript.py
(03 Set '14, 18:22) enzoge enzoge's gravatar image

Grazie a tutti per le risposte! certo se eseguo da terminale: python myscript.py funziona tutto correttamente! mh interessante @letizia, @ilgallinetta. Quindi la stringa cronjob deve essere una cosa simile:

00 15 * * * /usr/bin/python /home/alessio/myscript.py

provo subito! e riferisco se funziona!

p.s. (ovviamente metto l'avvio dello script prima di quell'ora altrimenti ci facciamo nottata :))

(04 Set '14, 10:16) aleks1 aleks1's gravatar image

Purtroppo niente è cambiato..

30 10 * * * /usr/bin/python /home/alessio/myscript.py

la stringa che ho modificato non ha funzionato...

non riesco a capire cosa sto sbagliando sembrava una cosa tanto semplice :)

altre idee?

Grazie ancora!

(04 Set '14, 10:36) aleks1 aleks1's gravatar image

Prova a redirigere standard output e standard error su un file, così potrai vedere cosa succede.

(04 Set '14, 11:08) letizia letizia's gravatar image

e come posso fare?

(04 Set '14, 11:16) aleks1 aleks1's gravatar image

@aleks1: noto che le domande che ho posto all'inizio non sembrano essere state prese in considerazione.

(04 Set '14, 11:48) enzotib ♦♦ enzotib's gravatar image

Aggiungi in fondo al comando > /pathDoveVuoiTu/file.log 2>&1

Comunque, prova a rispondere alle domande di @enzotib, magari è più semplice di quello che sembra :)

@enzotib puoi per favore riportare i link alle domande a cui ti riferisci? Le ho cercate, ma non le ho trovate :(

(04 Set '14, 12:03) letizia letizia's gravatar image

@aleks1, Prova a dare i permessi allo script cosi e testa poi il funzionamento con Cron:

chmod 777 /home/alessio/myscript.py

(04 Set '14, 14:49) Juan Juan's gravatar image

@Juan: 777 mi fa venire la pelle d'oca :) , tutti possono modificarlo (non sappiamo se è un pc casalingo o in produzione in qualche azienda).
Un 755 è più che sufficiente, e sempre che abbia lo shebang come prima riga.

(04 Set '14, 14:56) enzotib ♦♦ enzotib's gravatar image

@enzotib solo per verificare non sia un problema di permessi... 755 non e' sufficiente a vedere se da "altri" possa essere eseguibile e "verificare" non sia appunto un problema di permessi :)

(04 Set '14, 14:59) Juan Juan's gravatar image

@Juan: 755 sarebbe rwxr-xr-x, cioè tutti possono leggere ed eseguire.

(04 Set '14, 15:02) enzotib ♦♦ enzotib's gravatar image

@enzotib pardon, si, mi sono spiegato male io, hai ragione, volevo intendere per tagliare la testa al toro e verificare non sia un problema legato ai permessi di testare con 777 totale in modo che si possa escluderlo definitivamente non sia risolutivo...

(04 Set '14, 15:08) Juan Juan's gravatar image

scusami @enzotib mi ero dimenticato di dire che le domande le avevo già lette... ma ahimè ci avevo capito ben poco:) per quanto riguarda i permessi @Juan posso tranquillamente provare a mettere 777 :)

(04 Set '14, 15:14) aleks1 aleks1's gravatar image

però per quanto riguarda la prova di @letizia "Aggiungi in fondo al comando > /pathDoveVuoiTu/file.log 2>&1"

ha dato il seguente risultato:

che giorno siamo? dammi il numero da 1 a 31: Traceback (most recent call last): File "/home/alessio/myscript.py", line 8, in <module> day = int(raw_input("che giorno siamo? dammi il numero da 1 a 31: ")) EOFError: EOF when reading a line

si blocca quando dovrebbe chiedere il giorno.. ma avviandolo manualmente va tutto alla perfezione.. non capisco... :(

(04 Set '14, 15:14) aleks1 aleks1's gravatar image

@aleks1: ma come vuoi lanciare da cron un programma che chiede input dall'utente?

(04 Set '14, 15:18) enzotib ♦♦ enzotib's gravatar image

eccoci che ho fatto di male? ehehe :) no non dirmi che non si può! :( io pensavo mi apparisse il terminale per poi rispondere alla domanda! allora è per quello che non funziona? :(

(04 Set '14, 15:22) aleks1 aleks1's gravatar image

Ciao @aleks1, allora fai la prova con i permessi, ma mi viene in mente anche un altra cosa,quando salvi da nano (l' editor che ti fa editare anche cron), salvi nella posizione di default o hai cambiato? Se avessi cvambiato prova anche a salvare , rifacendo tutto da capo, nella posizione default che ti da...

(04 Set '14, 15:22) Juan Juan's gravatar image

@aleks1: direi proprio che il problema è quello, se ti serve un terminale devi lanciarlo, con tutte le difficoltà di lanciare una applicazione grafica da cron.
Se stai facendo solo delle prove con cron, allora non leggere input e scrivi su file.

(04 Set '14, 15:24) enzotib ♦♦ enzotib's gravatar image

ahhhh ma dai?! hahaha @aleks1...

(04 Set '14, 15:25) Juan Juan's gravatar image

@enzotib accidenti non pensavo ci fossero tanti problemi! mh si sono solo prove...ma era una prova che mi interessava....:( ma non c'è proprio modo di avviare automaticamente il terminale per farmi chiedere l'input del programma?

(04 Set '14, 15:29) aleks1 aleks1's gravatar image

@aleks1: dipende anche dal terminale, che dipende dall'ambiente grafico. Cioè ti sto domandando quale specie di Ubuntu stai utilizzando (per inciso, ci sarebbe xterm che va sempre bene, ma non è molto carino).

(04 Set '14, 15:33) enzotib ♦♦ enzotib's gravatar image

@enzotib ho ubuntu 14.04 lts :)

la carineria non mi interessa :) comunque come potrei fare con xterm? Grazie della pazienza ehehe :)

(04 Set '14, 15:38) aleks1 aleks1's gravatar image

Anche una cosa del genere (Ubuntu): gnome-terminal -x comando/i in uno script ma dipende dai comandi e troppi fattori.

(04 Set '14, 15:41) Juan Juan's gravatar image
2

@aleks1: metti in crontab:

DISPLAY=:0
XAUTHORITY=/home/alessio/.Xauthority
0 15 * * * gnome-terminal -x sh -c "/home/alessio/myscript.py; read"

un po' di complicazione è dovuta al fatto di non far chiudere il terminale quando lo script termina. Per chiuderlo devi premere invio.

(04 Set '14, 15:46) enzotib ♦♦ enzotib's gravatar image
2

evviva cosi funziona!! :)

* * * * * xterm -display :0 -hold -e '/home/alessio/myscript.py '

si apre xterm e mi chiede l'input!! :)

grazie di tutto ragazzi :) @enzotib @Juan @letizia @ilgallinetta

(04 Set '14, 15:57) aleks1 aleks1's gravatar image

ah bene allora provo anche come hai fatto tu! :) @enzotib grazie ancora!!! :)

(04 Set '14, 15:59) aleks1 aleks1's gravatar image
1

Veramente ha risolto cosi:

* * * * * xterm -display :0 -hold -e '/home/alessio/myscript.py '

Ci e' arrivato da solo con l' aiuto di tutti...

Ma sarebbe da auto-accettarsi la sua...

Neanche ha ancora provato la cosa suggerita da @enzotib.

(04 Set '14, 20:11) Juan Juan's gravatar image

@Juan, hai ragione, l'utente può decidere per il meglio.

(04 Set '14, 20:50) enzotib ♦♦ enzotib's gravatar image

No problem, ritengo solo che la cosa piu' sensata sia trasformare in risposta il suo stesso commento che porta alla soluzione, l' ha gia' detto che ha risolto cosi
E ripristinare i commenti cosi com' erano. Alla fine, almeno per me, la cosa importante e' che abbia risolto, ma per utenti che leggernno in futuro...
Solo un parere sei tu l' amministratore. :)

(04 Set '14, 21:12) Juan Juan's gravatar image

In effetti c'è un'altra cosa interessante, la variabile XAUTHORITY non serve, serviva invece per il problema del NotifySend presente in una precedente domanda richiamata in mio commento alla domanda.
La variabile DISPLAY invece è necessaria, a meno che il programma non l'accetti come parametri (come fa xterm ed in generale in un modo o nell'altro anche gli altri emulatori di terminale).

(04 Set '14, 21:16) enzotib ♦♦ enzotib's gravatar image

Che e' sucesso, ho inserito un commento ma e' sparito Oo
Dicevo comunque che secondo me la cosa piu' semplice con cron e' richiamare uno script, cosi cron si occupa solo di lanciare lo script ed esce di scena, e lo script puo' eseguire in liberta' tutti i comandi della potente bash. Che ne pensi @enzotib

(04 Set '14, 21:26) Juan Juan's gravatar image

@Juan, si sicuramente è il modo più flessibile. Questo non toglie che nello script bisognerà prendersi cura di impostare il display in un modo o nell'altro se si vuole lanciare un'applicazione grafica.

(04 Set '14, 21:28) enzotib ♦♦ enzotib's gravatar image

Intendi, come abbiamo suggerito entrambi: gnome-terminal -x (Per esempio?)
Se si, certo, bisogna richiamarlo, se no, spiegami, allargherai i miei orizzonti in fatto di bash :)
A dopo e grazie dell eventuale risposta!

(04 Set '14, 21:45) Juan Juan's gravatar image

Mi ero assentato dalla discussione per controllare che funzionasse lanciando uno script senza l'apertura di una finestra terminale.

Ho fatto uno script con il comando dv-v >pippo e l'ho fatto partire con i parametri :

minuti ora * * * /home/mia_home/script

e dopo averne verificato il buon funzionamento al rientro in questa domanda, ho capito che il problema era stato risolto da @enzotib. Mi scuso con @Juan per l'errore.

(04 Set '14, 22:04) enzoge enzoge's gravatar image

vedo che le argomentazioni aumentano! :) allora resto in ascolto... si può sempre apprendere qualcosa in più! :)

(05 Set '14, 10:10) aleks1 aleks1's gravatar image

Scusate, ma non l'accendiamo :)? @aleks1, se hai voglia, perché non scrivi come hai risolto?

(05 Set '14, 13:58) letizia letizia's gravatar image

sisi @letizia ho gia scritto come ho risolto se guardi qualche commento più su :) ma vedevo che dicutevano sul fatto di mettere la mia soluzione o la soluzione di @enzotib come risposta alla mia domanda....comunque vanno bene tutti e due i metodi anzi dirò di più il metodo di @enzotib è esteticamente più bello :)

(05 Set '14, 14:12) aleks1 aleks1's gravatar image

in ogni caso ecco la prima soluzione di @enzotib e @Juan

DISPLAY=:0

XAUTHORITY=/home/alessio/.Xauthority #si può tranquillamente omettere questa riga

0 15 * * * gnome-terminal -x sh -c "/home/alessio/myscript.py; read"

o questa che è la mia:

0 15 * * * xterm -display :0 -hold -e '/home/alessio/myscript.py '

(05 Set '14, 14:12) aleks1 aleks1's gravatar image

@aleks1: aggiungo che la tua non necessita DISPLAY, dato che lo passa come parametro a xterm, inoltre non richiede la "read" dopo lo script, dato che passa il parametro -hold sempre a xterm. Ora, dipende da qualche emulatore uno decide di usare se sono disponibili delle opzioni che permettano di passare il display e la non chiusura della finestra. La soluzione con DISPLAY come variabile e con "read" dovrebbe funzionare con tutti i terminali.

(05 Set '14, 14:19) enzotib ♦♦ enzotib's gravatar image

@enzotib esatto anche questo è un pro della tua soluzione perchè non dipende da quale terminale si usa! :)

(05 Set '14, 14:28) aleks1 aleks1's gravatar image
1

@aleks1: inoltre devi essere tu a decidere se hai più risolto da solo (e quindi potresti scrivere una risposta) oppure sei più stato aiutato da qualche commento (in tal caso lo convertiamo in risposta). L'importante è che ci sia una risposta chiara per i posteri.

(05 Set '14, 14:36) enzotib ♦♦ enzotib's gravatar image

sicuramente da solo non ho risolto un bel niente! :) è l'insieme che mi ha aiutato a capire il perchè non funzionava e cosa dovevo cercare per risolvere il problema... comunque alla fine quello che ci ha fatto toccare il punto giusto (dove sbagliavo) è il commento di @letizia "redirigere standard output e standard error su un file" per vedere cosa c'era di sbagliato. e poi altro commento utile, che possiamo tranquillamente mettere come risposta, è il tuo commento che spiega cosa mettere in crontab per eseguire lo script come richiedevo all'inizio.....

(05 Set '14, 14:57) aleks1 aleks1's gravatar image
2

Aggiungo al commento di @enzotib, che potresti anche decidere di scriverla tu, riassumendo tutto quello che nei commenti ti è servito, dai, poco importa chi la scrive, l'importante è scriverla, no?

(05 Set '14, 18:16) letizia letizia's gravatar image

Grande @letizia!!

(06 Set '14, 03:12) Juan Juan's gravatar image

Allora risponderò da solo alla mia domanda :) Il problema principale era che senza comandi in più per il crontab, il mio programma python, non avrebbe mai chiesto un input all'utente in automatico! e questo è stato scoperto da @letizia grazie al suo commento:

Aggiungi in fondo al comando > /pathDoveVuoiTu/file.log 2>&1

che ha dato il seguente risultato:

che giorno siamo? dammi il numero da 1 a 31: Traceback (most recent call last): File "/home/alessio/myscript.py", line 8, in <module> day = int(raw_input("che giorno siamo? dammi il numero da 1 a 31: ")) EOFError: EOF when reading a line

dopo aver trovato il punto dove ragionare per trovare una soluzione. E' stato facile per @enzotib e @Juan trovare la strada giusta per risolvere il problema.

commento di @Juan:

Anche una cosa del genere (Ubuntu):
 gnome-terminal -x comando/i in uno
 script ma dipende dai comandi e troppi
 fattori.

commento di @enzotib:

metti in crontab:

DISPLAY=:0
XAUTHORITY=/home/alessio/.Xauthority (si può omettere questa riga)
0 15 * * * gnome-terminal -x sh -c "/home/alessio/myscript.py; read"

un po' di complicazione è dovuta al fatto di non far chiudere il terminale quando lo script termina. Per chiuderlo devi premere invio.

Nel mentre tutti rispondevano alle mie domande io stavo cercando una soluzione usando xterm (al posto dello gnome-terminal), consigliato da @enzotib.

la mia soluzione trovata usando xterm:

0 15 * * * xterm -display :0 -hold -e '/home/alessio/myscript.py '

anche questa soluzione funziona, ma personalmente consiglio la soluzione scritta da @enzotib.

Ringrazio tutti per il supporto!

coll. permanente

ha risposto 08 Set '14, 10:41

aleks1's gravatar image

aleks1
553410

@aleks1: ora devi solo accettare la tua risposta :)

(08 Set '14, 11:00) enzotib ♦♦ enzotib's gravatar image

@enzotib: ehehe non lo sapevo :) come risposta va bene? :)

(08 Set '14, 11:05) aleks1 aleks1's gravatar image

@aleks1: direi di sì

(08 Set '14, 11:14) enzotib ♦♦ enzotib's gravatar image

Mi scuso se entro nel discorso, spero di non essere inopportuno, ma visto che si tratta di una soluzione interessante, non sembra anche a voi il caso di modificare i tag e il titolo della domanda, togliendo che non fa partire lo script (cosa non proprio vera) e scrivendo che non apre la finestra del terminale quando uno script ne ha bisogno?.

(08 Set '14, 12:13) enzoge enzoge's gravatar image

@ilgallinetta, non credo, perché questo si è capito solo a posteriori, e cambiare il titolo renderebbe incomprensibile tutta le serie di commenti che ci sono stati.
Inoltre se uno ha problemi con crontab probabilmente cerca e legge tutti i post disponibili, che sono pochini (almeno su questo sito).

(08 Set '14, 12:50) enzotib ♦♦ enzotib's gravatar image

Si è vero, per trovare questa domanda basterà cercare con i tag attuali: "Ubuntu" o "script". Crontab e l'avvio finestra terminale da crontab non ci azzeccherebbero.

(08 Set '14, 13:35) enzoge enzoge's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×1,715
×49

domanda posta: 03 Set '14, 15:29

domanda visualizzata: 1,721 volte

ultimo aggiornamento: 08 Set '14, 13:46

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.