Raspberry Pi - Script per avvio programmi allo start-up

Oggi vi voglio parlare di come si scrive uno script che si avvia automaticamente. Può servire per esempio quando una alcuni programmi che non riescono a partire di default all’avvio. Vi spiegherò come configurare l'avvio dello script in automatico o quando lo volete voi.
Questo script avvierà in automatico la mappatura della cartella di rete.
Distribuzione di riferimento: Raspbian ultima versione
Guida di riferimento: raspberry pi - run program at start up , Script per avvio programmi allo start-up
Prima di cominciare creiamo una cartella
CODICE DA SCRIVERE NEL TERMINALE :
sudo mkdir /mnt/sambasharesudo chown -R pi /mnt/sambasharesudo chmod -R 777 /mnt/sambashare
sudo mkdir /mnt/sambasharesudo chown -R pi /mnt/sambasharesudo chmod -R 777 /mnt/sambashare
Creare lo script
La prima cosa da fare è creare lo script. Uno script è un pezzo di codice che una volta reso eseguibile viene appunto eseguito e svolge le azioni per il quale è stato scritto.
Creiamo lo script chiamato per esempio SMBShare:
CODICE DA SCRIVERE NEL TERMINALE :
sudo nano /etc/init.d/SMBShare
sudo nano /etc/init.d/SMBShare
Si aprirà l’editor nano completamente vuoto. Copiateci tutto il seguente Script :
CODICE DA SCRIVERE NEL TERMINALE :
#! /bin/sh# /etc/init.d/SMBShare
### BEGIN INIT INFO# Provides: SMBShare# Required-Start: $remote_fs $syslog# Required-Stop: $remote_fs $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: SMBShare Automatic mount Folder Share# Description: SMBShare Automatic mount Folder Share### END INIT INFO
# If you want a command to always run, put it herestart() { echo -n "Starting SMBShare : " ### Create Mount HD ###### run application you want to start ### sudo mount -t cifs //IP_address/scan /mnt/sambashare -o uid=1000,iocharset=utf8,username="nome_utente",password="password",sec=ntlmecho}# Restart the service SMBSharestop() { echo -n "Stopping SMBShare :" ### Delate Mount HD ###### kill application you want to stop ###sudo umount /mnt/sambashare echo}### main logic ###case "$1" in start) start ;; stop) stop ;; status) status SMBShare ;; restart|reload|condrestart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 1esacexit 0
#! /bin/sh# /etc/init.d/SMBShare### BEGIN INIT INFO# Provides: SMBShare# Required-Start: $remote_fs $syslog# Required-Stop: $remote_fs $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: SMBShare Automatic mount Folder Share# Description: SMBShare Automatic mount Folder Share### END INIT INFO# If you want a command to always run, put it herestart() {echo -n "Starting SMBShare : "### Create Mount HD ###### run application you want to start ###sudo mount -t cifs //IP_address/scan /mnt/sambashare -o uid=1000,iocharset=utf8,username="nome_utente",password="password",sec=ntlmecho}# Restart the service SMBSharestop() {echo -n "Stopping SMBShare :"### Delate Mount HD ###### kill application you want to stop ###sudo umount /mnt/sambashareecho}### main logic ###case "$1" instart)start;;stop)stop;;status)status SMBShare;;restart|reload|condrestart)stopstart;;*)echo $"Usage: $0 {start|stop|restart|reload|status}"exit 1esacexit 0
Una volta scritto in accordo alle vostre necessita date un bel CTRL-O per salvare e CTRL-X per uscire dall’editor nano.
Fate però attenzione a non avviare programmi che richiedono risposte da parte dell’utente. Per esempio non fate partire programmi che richiedono di dare conferme tipo –y o –n ( -s o -n) altrimenti lo script bloccherà l’avvio del raspberry aspettandosi appunto un vostro input. Con i programmi sopra, una volta configurati (dopo il primo avvio) lo script funziona benissimo.
Rendere lo script eseguibile e funzionante
Adesso che il codice è pronto dobbiamo fare in modo che non sia considerato un semplice pezzo di testo (anche poco comprensibile…) ma bensì un codice da eseguire. Vediamo come…
Rendiamo lo script eseguibile con:
CODICE DA SCRIVERE NEL TERMINALE :
sudo chmod 755 /etc/init.d/SMBShare
sudo chmod 755 /etc/init.d/SMBShare
Facciamo un test
Per vedere se funzione digitiamo da terminale i seguenti comandi.
Per avviare lo script
CODICE DA SCRIVERE NEL TERMINALE :
sudo service SMBShare start
sudo service SMBShare start
mentre per stopparlo
CODICE DA SCRIVERE NEL TERMINALE :
sudo service SMBShare stop
sudo service SMBShare stop
Nota: seguendo pedissequamente la guida originale dovrei usare:
CODICE DA SCRIVERE NEL TERMINALE :
sudo /etc/init.d/SMBShare start
sudo /etc/init.d/SMBShare stop
sudo /etc/init.d/SMBShare start
sudo /etc/init.d/SMBShare stop
Io ho preferito usare la forma: service SMBShare start|stop mostrata sopra perché si ricorda decisamente più facilmente ed è comunque efficacie. Nel caso potete anche usare i comandi start|stop|restart|reload|status;
Far eseguire lo script automaticamente allo start-up
Per far eseguire automaticamente lo script allo start-up del sistema dare il commando:
CODICE DA SCRIVERE NEL TERMINALE :
sudo update-rc.d SMBShare defaults
sudo update-rc.d SMBShare defaults
Nota: nel mio caso l’ultimo commando non è stato dato perché preferisco scegliere io quando e se far partire I servizi che ho raccolto nello script. Quindi una volta avviato il sistema, per avviare i servizi scelti in un colpo solo do il comando:
CODICE DA SCRIVERE NEL TERMINALE :
sudo service SMBShare start
sudo service SMBShare start
E tutto funziona senza problemi :)
Se volete rimuovere lo script automatico all’avvio e usarlo come lo uso io non date il comando sudo update-rc.d SMBShare defaults oppure se, presi dall’entusiasmo di copiare e incollare comandi sul terminale avete erroneamente beccato anche l’ultimo, nessun problema…lo rimuovete con:
CODICE DA SCRIVERE NEL TERMINALE :
sudo update-rc.d -f SMBShare remove
sudo update-rc.d -f SMBShare remove
By ImaginSystems & Queen Gin