Newsgroup: it.comp.os.linux.iniziare
Titolo: Comportamento inspiegabile script

Ciao NG
 
Il contesto è un Raspberry che comanda una scheda relè. I 
comandi vengono dati scrivendo dei files che vengono 
"pollati" da un servizio apposito, o almeno credo sia così 
dato che quando ne cambio il contenuto i relè rispondono.
 
Ho scritto un piccolo script che viene chiamato al boot 
per configurare i piedini corrispondenti a ciascun relè. 
Lo script è di questo tipo, per un solo relè:
 
 
/usr/bin/gpio  export    6  out
echo '1' > /sys/class/gpio/gpio6/active_low
sleep 0.25
echo '0' > /sys/class/gpio/gpio6/value
 
 
Ovvero:
 
- si pone il pin 6 come uscita
- si setta il flag di inversione (il relè viene chiuso se 
il livello logico è zero). Appena scritto questo valore 
nel file il relè si chiude, cosa che peraltro non vorrei 
ma pare inevitabile dato il tipo di scheda relè.
- pausa di 250 ms per non farlo riaprire immediatamente
evitandogli stress
- si apre il relè.
 
Ora, se lo eseguo in una finestra comandi funziona come 
vorrei; uno dopo l'altr si accendono per 250 ms poi si 
spengono fino all'ultimo.
 
E adesso la sorpresa. Io vorrei farlo eseguire al boot 
quindi per prima cosa ho inserito in crontab
 
@reboot /home/pi/resto_del_path/init_rasp.sh
 
Al boot viene eseguito ma ciascun relè viene chiuso ma non 
si riapre, ovvero si chiudono uno dopo l'altro a 
intervalli di 250 ms.
 
Pensando che forse qualche daemon o altro non fosse pronto 
al boot ho provato (ci mette 2 min a partire quindi sono 
stato abbondante):
 
@reboot sleep 150 && /home/pi/resto_del_path/init_rasp.sh
 
Ma non è cambiato niente. Allora ho inserito "sleep 150" a 
inizio del file init_rasp.sh ma niente, identico 
comportamento.
 
Sembra insomma che mentre in manuale è OK, in automatico 
non venga eseguito:
 
echo '0' > /sys/class/gpio/gpio6/value
 
E ovviamente non so nemmeno da dove cominciare per 
debuggare una cosa del genere.
 
Penso piuttosto che ci sia qualcosa di fondamentale che mi 
sfugge, a meno che i permessi per scrivere quei files 
cambino a seconda di cosa succede. Ammesso che sia un 
problema di permessi come posso eseguire lo script con il 
massimo dei privilegi? Ma allora perché da semplice utente 
funziona anche senza "sudo"?
 
Dove sbaglio?
 
Grazie :)
 
Apx.
 
 
-- 
- Amore, finalmente a letto... Fammi urlare come
   una pazza!
- Sei ingrassata.
 

 echo '0' > /sys/class/gpio/gpio6/value
 
Premesso che io al boot uso mettere tutto in /etc/rc.local....
Provato a mettere /bin/sleep al posto del semplice sleep?
 
 
 
-- 
--- Blue Wave/Max v2.10
 * Origin: HAL BBs Riding the Blue Wave Now ! (2:331/105)

Aggiungo 
 
- logga il risultato dei comandi, compresi gli errori, in un file di log.
- logga alla fine di tutto, il contenuto degli stati impostati.
 
 
Il Sat, 10 Oct 2020 23:18:50 +0000, BIG Umberto ha scritto:
 
]zac[


 @reboot /home/pi/resto_del_path/init_rasp.sh 
 
diciamo che non è il sistema migliore per eseguire uno script al boot. in questo caso la shell viene eseguita alla partenza di cron e a seconda delle implementazioni tu puoi avere o non avere servizi avviati e/o risorse disponibili.
se lo avvii come servizio systemd abilitato hai il controllo su quando deve partire, senza ricorrere a sleep stocatici.

Grazie per l'aiuto... :) Sono riuscito a farlo eseguire 
come sevizio, e non ho messo la "r" perché non ne vengo a 
capo, si comporta sempre in quel modo assurdo. Ho trovato 
in rete che per avere il log dello script bisogna scrivere 
un'apposita linea a inizio e una a fine file. Dato che il 
"coso" è soprattutto hardware e fili e devo sgombrare il 
tavolo, spero di poter provare quanto prima.
 
Per ora grazie mille e a presto :)
 
Apx.
 
-- 
- Signor Mark, papà dice che con Facebook ci spiate...
- Non è tuo padre.