• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
programma in solo anomalia background

Anomalia programma solo in background
#1
Buonasera. Chiedo scusa se formulo domande banali ma, dopo aver brancolato nel web, non so a chi rivolgermi per chiedere aiuto a risolvere un nuovo problema. Ho redatto un programmino in python che -tra l'altro- registra su un file (grazie ippogrifo) i risultati di alcune misurazioni. Gira regolarmente, nessun intoppo anche dopo diversi cicli. Il problema sorge quando cerco di farlo partire in background. E niente. non va. Suppongo dipenda da priorità di esecuzione o roba del genere ma oltre non vado. Se necessario posso postare il programma ma esso richiede l'installazione di librerie aggiuntive e, forse, la questione è risolvibile con qualche semplice accorgimento. Grazie
Risposta
#2
Prova a porre (se ricordo correttamente) il comando "&" (la e commerciale) dopo il nome del programma/script da eseguire (il comando "&" permette l’esecuzione del processo in background); ad esempio nel caso di impiego di crontab per eseguire un programma in background:
@at reboot python /path_eseguibile/my_prog.py &
Risposta
#3
(12/11/2019, 17:47)ippogrifo Ha scritto: Prova a porre (se ricordo correttamente) il comando "&" dopo il nome del programma da eseguire  (il comando "&" permette l’esecuzione del processo in background); ad esempio nel caso di impiego di crontab per eseguire un programma in background:
 @at reboot python /directory_eseguibile/my_prog.py &

provato con e senza simbolo. Non va comunque. provo a "smontare il programma per limitare il settore che blocca l'esecuzione.
Risposta
#4
Strano, non ho mai avuto problemi, anche se erano eseguibili (compilati da C). Ma "smontare il programma ......)?
Prova ad avviare la procedura come superuser (sudo ...).
Risposta
#5
delimitato il problema.
def scrivifile(nome,contenuto):
file1 = open(nome+".txt","w")
file1.write("\n"+contenuto)
domoticz(report,"eccomi")
sleep(5)
file1.close()
sleep(5)
domoticz(report,"finito")
se lo eseguo lanciando il programma in foreground funziona correttamente. Se lo lancio al reboot i vari segnalibro che mando a domoticz passano regolarmente mentre il file non viene scritto. Anche gli sleep non hanno sortito effetto. Dev'essere un problema di accavallamento di istruzioni.
Risposta
#6
Non conosco python e la sua sintassi, ma se il file non viene scritto è probabile che uno dei due parametri della funzione non sia ancora definito. Inserisci delle istruzioni di print, come debug, prima di file1.... per vedere cosa viene passato come nome e contenuto, dopo file1.write rileggi il contenuto di file1 (file1.read) e fallo stampare (print). Chiudi il file prima dell'istruzione domoticz........ , elimina le istruzioni di sleep. Di fatto avrai le due istruzioni di domoticz successive, puoi eliminarne una. Nel caso, a solo scopo di debug, puoi semplificare la funzione, ad esempio assegna all'interno della funzione il nome e passa solo il "contenuto". (Immagino che l 'indentazione dell'applicativo sia corretta)
Risposta
#7
1) Se lancio il programma da consolle funziona correttamente. D'altronde le variabili sono definite all'interno della funzione per cui sono certo che non è un errore di programma o mancanza di dati. 
2) Gli sleep li ho inseriti dopo pensando ci fosse un accavallamento di istruzioni. Inutile, manco a dirlo. Ho pure creato un file di lancio che, autoeseguito, provvede a lanciare il programma di scrittura.  Niente. 
Ho cercato online e non ho trovato nulla. D'altra parte l'anomalia persiste anche se faccio girare il programma su altro raspberry. 
Non so che pensare. Mi sarebbe stato utile scrivere i dati direttamente sulla sd per monitorare eventuali bugs. Mah
Risposta
#8
All'interno della funzione non vedo variabili locali, ma solo alcune stringhe. Nella definizione della funzione, gli argomenti della stessa devono essere definiti precedentemente per essere poi passati. Le istruzioni di print, utilizzate come debug, possono in fase di reboot mostrare eventuali "disallineamenti".
Avrai sicuramente reso eseguibile l'applicativo (eventualmente per tutti).
Risposta
#9
Ma tu, come lo lanci in background?
Se il file non viene creato può essere un problema di permessi. Se lanci lo script a mano usi il tuo utente (pi, di default), mentre se usi crontab, dipende:
Codice:
crontab -e
edita la tabella cron del tuo utente, mentre
Codice:
sudo crontab -e
edita la tabella cron dell'utente root (anche il file sarà scritto come root)

Sopratutto, cambia la cartella di lavoro! invece di dare solo il nome al file, metti il suo percorso assoluto, altrimenti lo scrive (o cerca di scriverlo) nella cartella di lavoro di crontab (o nella home di root?)
Risposta
#10
(13/11/2019, 01:26)Zzed Ha scritto: Ma tu, come lo lanci in background?
Se il file non viene creato può essere un problema di permessi. Se lanci lo script a mano usi il tuo utente (pi, di default), mentre se usi crontab, dipende:
Codice:
crontab -e
edita la tabella cron del tuo utente, mentre
Codice:
sudo crontab -e
edita la tabella cron dell'utente root (anche il file sarà scritto come root)

Sopratutto, cambia la cartella di lavoro! invece di dare solo il nome al file, metti il suo percorso assoluto, altrimenti lo scrive (o cerca di scriverlo) nella cartella di lavoro di crontab (o nella home di root?)

Riepilogo:
1) ho costruito un programma *.py che gira regolarmente lanciato da consolle. 
2) Messo in crontab gira altrettanto bene. 
3) c'è una parte del programma, tuttavia, quella relativa alla scrittura di file, che non funziona. Solo quella. Che è poi la funzione che ho stralciato nell'esempio riportato. Essa viene attivata, non dà errore, ma non svolge il suo compito di scrivere il file sulla sd.
Non credo sia un bug perché non ne ho trovato traccia nella consultazione che ho fatto. Non so che pensare. Due raspberry, entrambi aggiornati, stesso problema (di omissione). Brancolo nel buio.
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect