Page 1 of 1

Usare "screen" al boot del RPi

Posted: Mon Apr 22, 2013 2:04 pm
by TEKRULEZ
Salve a tutta la community di Rpi, non ho trovato una sezione di "benvenuto" in italiano, quindi mi presento al "volo", sono Fabio ho 24 anni ed ho ricevuto il mio RPi da qualche mese, ma solo ora ho il tempo di sperimentare, vi informo subito che sono un vero novizio in ambiente UNIX!

Ho un piccolo dubbio su come far partire 2 task in 2 windows al boot del RPi grazie al comodissimo comando screen...

Lo scenario attuale è:
RPi collocato a casa con server SSH attivo.
Mi collego da fuori casa al mio RPi con Putty.
Faccio il Login
Avvio Screen
Creo una window (di screen) ed avvio Streamripper (rippare radio internet in .mp3)
Creo una window (di screen) per usare la shell

Lo scenario che vorrei è lo stesso che ho descritto sopra, ma vorrei che il mitico RPi facesse tutto in automatico, ovvero che al boot crea una sessione di screen con 1 window con streamripper che rippa la radio online da me scelta, e crea 1 window per usare la shell, e se ne ho la necessità, mi servirebbe che crea un'altra window con un programma futuro che dovrà essere avviato (per esempio Transmission)...

Spero di essermi spiegato, attendo le vs risposte! ;)

Re: Usare "screen" al boot del RPi

Posted: Wed Apr 24, 2013 7:41 pm
by TEKRULEZ
Nessuno?

Re: Usare "screen" al boot del RPi

Posted: Thu Apr 25, 2013 9:00 pm
by naftaism
Ciao, probabilmente potresti usare crontab o aggiungere uno script all'rc.local/rc.d, penso che nel tuo caso possa bastare crontab.

Crontab è uno "scheduler" di comandi, script ecc... Ia comodità di usarlo sta nel poter pianificare
<quando chi cosa> fare ad intervalli di tempo come "ogni 5 minuti", o "una volta al giorno", o addirittura "ogni primo lunedì del mese" ecc... Tu potresti sfruttare un altra opzione ovvero: @reboot che si traduce letteralmente: all'avvio.

Ora, ci son vari modi per settare i cronjob gestiti da crontab, io preferisco editare il file in

Code: Select all

/etc/crontab
Iniziando a scrivere da qualunque riga non commentata, in genere fondo pagina, aggiungo qualcosa simile a (seguono alcuni esempi simili tra loro)

Code: Select all

@reboot root sh /home/utente/scripts/mioscript.sh
@reboot root sleep 60 && echo "ciao" > /home/utente/logs/log.txt
@reboot root screen ./script.sh -S nome_sessione_a_piacere
Ti consiglio di cercare esempi su internet, ne troverai a migliaia e in tutte le lingue!

P.S. ho dato per scontato che tu abbia installago di già screen, mentre crontab, fa parte in modo predifinito ai sistema linux/unix (forse non tutti? di certo si, sui sistemi debian based come la raspbian/et simili)..

Re: Usare "screen" al boot del RPi

Posted: Fri Apr 26, 2013 12:07 am
by TEKRULEZ
naftaism wrote:Ciao, probabilmente potresti usare crontab o aggiungere uno script all'rc.local/rc.d, penso che nel tuo caso possa bastare crontab.

Crontab è uno "scheduler" di comandi, script ecc... Ia comodità di usarlo sta nel poter pianificare
<quando chi cosa> fare ad intervalli di tempo come "ogni 5 minuti", o "una volta al giorno", o addirittura "ogni primo lunedì del mese" ecc... Tu potresti sfruttare un altra opzione ovvero: @reboot che si traduce letteralmente: all'avvio.

Ora, ci son vari modi per settare i cronjob gestiti da crontab, io preferisco editare il file in

Code: Select all

/etc/crontab
Iniziando a scrivere da qualunque riga non commentata, in genere fondo pagina, aggiungo qualcosa simile a (seguono alcuni esempi simili tra loro)

Code: Select all

@reboot root sh /home/utente/scripts/mioscript.sh
@reboot root sleep 60 && echo "ciao" > /home/utente/logs/log.txt
@reboot root screen ./script.sh -S nome_sessione_a_piacere
Ti consiglio di cercare esempi su internet, ne troverai a migliaia e in tutte le lingue!

P.S. ho dato per scontato che tu abbia installago di già screen, mentre crontab, fa parte in modo predifinito ai sistema linux/unix (forse non tutti? di certo si, sui sistemi debian based come la raspbian/et simili)..
Grazie della risposta, e anche molto dettagliata! Sempre da novizio linux, avrei un'altra domanda che anche cercando in giro per il web, non ho trovato una risposta che mi tolga i miei dubbi...

Sò che linux ha vari file/script che vengono eseguiti all'avvio del sistema... se hai un pò di tempo potresti farmi una breve distinzione tra i file file che vengono eseguiti all'avvio del sistema? per esempio io ho configurato in /etc/rc.local, il programma noip2, ma non ho capito perchè metterlo lì invece di metterlo in un'altro file di boot...

Se riesco a entrare nella logica dei vari file di avvio che ha linux forse potrei risolvere altri problemi che ho di fronte, ad esempio impostare che ad ogni avvio del sistema, il raspberry monti automaticamente una pennetta esterna da 8 gb e con streamripper o transmission, tutto ciò che viene prelevato per la rete come radio online o torrent, vengano messi in automatico nella pen-drive da 8gb...

Comunque ora vado subito a vedere il comando crontab e le sue funzioni base e magari anche qualcosa di più avanzato...

Re: Usare "screen" al boot del RPi

Posted: Fri Apr 26, 2013 2:52 am
by naftaism
Ciao, spero di esserti stato utile fin ora, cerco di rispondere alle altre domande:
premetto che non sono espertissimo, ma posso limitarmi a condividere le mie esperienze, poi qualche ricerca in rete più dettagliata la faccio anch'io... magari approfondisco con la scusa!

Iniziamo ad esempio con init.d:
Differisce da cron (cron è il daemon in esecuzione, crontab è un file contenuto in /etc/ che fa funzionare tale daemon) in quanto esegue script o comandi senza tener conto di "quale utente" lo esegue, qualunque cosa esegua, la eseguirà con i massimi privilegi, su cron lo si specifica in quel file. Addirittura ogni utente dispone di alcuni file personali atti a configurare cron, quello che ti ho spiegato è per me il più semplice da usare, ma sappi esistono configurazioni diverse e più approfondite che prevedono la modifica di files quali "cron.hourly', 'cron.daily', 'cron.weekly' e 'cron.monthly', che sinceramente non uso mai... non saprei approfondire oltre.

Seconda cosa importante, cron ha la possibilità di eseguire ciclicamente gli script, se per esempio al posto di @reboot imposti qualcosa tipo:

Code: Select all

*/5 * * * * root sh /home/pi/scripts/script_esempio.sh
verrà eseguito ogni 5 minuti, supponiamo di avere un pc che non viene spento per un periodo lungo, questo script verrà eseguito sempre una volta ogni 5 minuti, init.d eseguirà gli script all'avvio del sistema e stop. rc.local credo, non vorrei dire qualcosa di blasfemo! Sia configurabile anche da utenti senza privilegi di root, per azioni/comandi meno importanti. Non sono fresco nell'argomento :? Ripeto ci sarà sicuramente molto di più da dire a riguardo,
invito utenti più esperti a correggere le mie affermazioni ed approfondire se necessario! Personalmente ho creato una cartella "scripts" contenente circa 15 scripts controllati tutti da cron, sia banali "aggiorna l'orologio ogni 60 minuti tramite ntp" che più importanti "impostazioni iptabels/firewall interno". Che dire preferisco avere tutto sotto controllo, e lanciare un semplice

Code: Select all

service cron stop/start/restart
Per quanto riguarda transmission et simili, io attualmente ho installato transmission-daemon, e lo posso controllare (previa configurazione tramite modifica del file /etc/transmission-daemon/settings.json se non l'ho scritto male) tramite interfaccia web, in remoto, o nella stessa rete da pc smarthphone/tablets, magari se ti interessa possiamo approfondire, mentre per quanto riguarda montare automaticamente chiavette/hd esterni, devi modificare il file

Code: Select all

 /etc/fstab
e devi sapere ovviamente che tipo di filesystem ha la chiavetta/hd in questione, faccio un esempio di hd esterno con filesystem ntfs:

Occorre installare ntfs-3g (quindi apt-get update e apt-get install ntfs-3g), collegare l'hd, e verificare che nome ha assegnato il sistema al dispositivo:

Code: Select all

ls /dev/sd*
restituirà la lista di tutte le periferiche di archiviazione esterne collegate, se hai solo quello, spunterà sda1 o sdb1 ecc ecc...
nota bene, anche se avrai un solo hd/pendrive collegato vedrai più di un elemento, sda e sda1 per fare un esempio, in poche parole gli "sda" seguiti da numero, sono le "partizioni" presenti dentro sda.
Questo ti interessa saperlo perchè quando darai il comando mount, specificherai sorgente e destinazione, in modo simile a questo:

Code: Select all

mount -t ntfs-3g /dev/sda1 /mnt/hd-esterno-partizione-1
/mnt/hd-esterno-partizione-1 è una cartella che se non esiste non verrà creata automaticamente, quindi bisogna prima crearla:

Code: Select all

mkdir /mnt/nome_a_piacere
Bene ora che sai come montare manualmente l'hd/pendrive andiamo a vedere come farlo in modo automatico all'avvio del sistema tramite /etc/fstab, di seguito un file vergine scopiazzato dal mio raspberry con nell'ultima riga un aggiunta di esempio:

Code: Select all

proc             /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

/dev/sda1 /mnt/HD-Esterno ntfs-3g defaults 0 3
Credo si spieghi da solo, data la premessa da me fatta prima, dovrebbe essere semplice comprenderne il contenuto, per le varie opzioni come "defaults" e i numeri 0 1 2 3 che vedi, puoi dare un occhiata veloce in rete, poichè sono parecchie informazioni per poterne parlare qui, posso dirti al volo che il campo dopo il tipo di filesystem specifica in che modo montare: r/w,r/o,noatime ecc... sono solo esempi, basta separare da virgola e aggiungerne quante se ne desiderino, lo zero ed il 3 sono riguardanti l'esecuzione di fsck (filesystem check) ad ogni avvio automaticamente, 0= disattivato, mentre dove vedi 1, 2 e 3, quei numeri servono a stabilire l'ordine in cui verranno controllati quando il comando fsck verrà lanciato manualmente e/o verrà richiesto in casi di emergenza dal sistema.

Anche qui c'è da approfondire, ma con un "defaults 0 X" sei appostissimo come me!
Spero di non aver creato più confusione di prima, ma è più veloce a farsi che a dirsi, smanettacci un pò e prenderai familiarità!

Piccolo edit:
trovato link interessante che spiega sicuramente molto meglio di me le varie caratteristiche dei vari rc.d/rc.local init e compagnia bella! :arrow:http://www.oneopensource.it/18/08/2011/ ... t-systemd/