Dopo aver installato Gnujiko (per cui scriverò forse una guidina apposta) va da sè che per usarlo si deve usare un browser. Userò Firefox.
Da linea di comando basta lanciare
~ $ firefox sito
per aprire una finestra del browser che punta al sito indicato (nel mio caso è un sito in locale chiamato fatture.local
Quindi si apre un editor di testo creando il file fatture.sh (ma il nome può essere quello che si vuole) e si inizia a scrivere
#!/bin/sh
#avviamo i servizi apache e sql
sudo service apache2 start
sudo service mysql start
#lanciamo firefox sul sito e riceviamo il numero di pid del processo appena lanciato e lo si invia a /dev/null per memorizzarlo temporaneamente dopo una attesa di 10 secondi, utile per completare l'avvio del programma.
firefox fatture.local &
pid=$!
sleep 10
ps -p$pid 2>&1 > /dev/null
#quindi si acquisisce lo status del processo avente il pid rilevato
status=$?
#se il valore dello status è 0, il programma è in esecuzione.
if [ "$status" = "0" ]
#in tal caso facciamo in modo che ogni tanto lo script vada a controllare lo status per vedere se il processo firefox è ancora attivo o è stato chiuso
then
while [ "$status" = "0" ]
do
sleep 60
ps -p$pid 2>&1 > /dev/null
status=$?
done
#nel caso invece il valore status controllato all'inizio,o quello rilevato ogni 60 secondi non sia 0, vuol dire che il processo NON è in esecuzione, quindi lo scrive a video (se stiamo eseguendo lo script dalla shell e termina il ciclo IF
else
echo Process with pid $pid is not running fi
#a questo punto si possono fermare i due servizi
sudo service apache2 stop
sudo service mysql stop
Si salva e si chiude.
A questo punto basta creare una iona sul desktop che faccia eseguire lo script. Si clicca col destro su un punto del desktop e si seleziona "nuovo lanciatore". Nella finestra che appare si da un nome, e si può scrivere la linea di comando:
gksudo -k -u root 'sh fatture.sh'
dove gksudo serve ad aprire l'interfaccia grafica che richiede la password di super user, necessaria per le autorizzazioni a far partire e fermare i servizi.
FATTO!
anzi...no occorre rimuovere i due servizi dall'avvio automatico del sistema.
Per Apache da terminale
- $ sudo update-rc.d -f apache2 remove
Per Mysql occorre modificare un file gksudo gedit /etc/init/mysql.conf andando a commentare anteponendo un cancelletto # davanti alle righe relative a "start on". tipo queste:
start on (net-device-up
and local-filesystems
and runlevel [2345])
Salvare e chiudere....
FATTO (davvero)
al prossimo avvio i due servizi non saranno attivi con un bel risparmio di risorse, il pc andrà più veloce e quando servirà di aviare il programma basterà farlo dall'icona sul desktop.
ATENZIONE! modifica del 5/6/15
Lo script così presentato funziona benissimo...ha solo un piccolo problema: la finestra di firefox si apre come root, quindi ogni cosa fatta avrà modifica con permessi di root, per cui nello specifico, le fatture create e salvate come pdf saranno nella dir di root, con permessi esclusivi.
Per ovviare a questa cosa ho apportato delle modifiche allo script. Eccole nel dettaglio:
1) il processo firefox viene lanciato come utente con il comando:
sudo --user=utente firefox -new-window fatture.ecco &
che esegue il programma come utente e in una nuova finestra (nel caso firefox fosse già aperto).
2) Questo crea un paio di problemi, come ad esempio la rilevazione del pid. Il processo infatti viene lanciato con un pid, ma subito decade in un altro. Dunque il metodo di rilevamento che avevamo definito sopra non funziona più. A questo punto per avere il pid del processo che mi interessa faccio una ricerca per nome:
pid=$(ps -ae | awk '$NF~"firefox" {print $1}')
istruzione che esegue una ricerca in tutti i processi in esecuzione che contengano la parola firefox....ne dovrebbe trovare uno solo.... a quel punto si prende con il comando awk la prima colonna che è il numero di pid. Il comando totale, racchiuso tra parentesi, manda l'output nella variabile pid.
3) Non so per quale motivo, ma questa cosa mi ha danneggiato l'avvio e la chiusura di mysql....cercando cercando ho trovato che queste due righe risolvono la questione
sudo /etc/init.d/mysql stop
sudo service mysql stop
Bene! a questo punto ho salvato lo script con nuovo nome, originalmente fatture2.sh, e modificato il lanciatore dal desktop in modo che puntasse al nuovo script.
Ecco fatto! Rispetto allo script precedente è da segnalare che in questo caso i server verranno spenti alla chiusura DEFINITIVA di firefox, incluse le eventuali finestre di navigazione...ma ci si può stare, almeno finché non capirò come fare per identificare le singole tab di firefox ;)
ANZI visto che con Firefox ho parecchi problemi anche a livello di gestione memoria ho visto che usando invece chromium funziona tutto alla grande!
Inserisco qui di seguito lo script definitivo, pronto al copia-incolla
#!/bin/sh
sudo service apache2 start
sudo service mysql start
#start firefox as user
sudo --user=utente firefox -new-window fatture.ecco &
#find pid of process by name
pid=$(ps -ae | awk '$NF~"firefox" {print $1}')
echo pid $pid
#Redirect stdout and stderr of the ps command to /dev/null
ps -p$pid 2>&1 > /dev/null
#Grab the status of the ps command
status=$?
#A value of 0 means that it was found running
if [ "$status" = "0" ]
then
while [ "$status" = "0" ]
do
sleep 60
ps -p$pid 2>&1 > /dev/null
status=$?
done
#A value of non-0 means that it was NOT found running
else
echo Process with pid $pid is not running
fi
#stopping processes
sudo service apache2 stop
sudo /etc/init.d/mysql stop
sudo service mysql stop