[RISOLTO] Script che esegue programma se un processo è in esecuzione

Aperto da Jacobbe73, Lunedì 29 Ottobre 2018, 01:13:51

Discussione precedente - Discussione successiva

Jacobbe73

Ciao a tutti,
sul mio server domestico, dove ho installato la Linux Mint 19.0 Mate, sto impazzendo a creare uno script che esegua dei comandi da terminale (nel mio caso forzi lo stand-by di tutti i mei dischi) solo se un processo è in esecuzione (interrogo lo screensaver nel mio caso "xmatrix").
Qui di seguito posto il mio script che purtroppo non funziona:

#!/bin/bash
if ps ax | grep -v grep | grep &xmatrix > /dev/null
then
hdparm -y /dev/sdb
hdparm -y /dev/sdc
hdparm -y /dev/sdd
hdparm -y /dev/sde
hdparm -y /dev/sdf
fi
exit


forse sono completamente fuori strada, ogni suggerimento è ben accetto!
Spero di esser stato chiaro.
Saluti e grazie!
Jacobbe73

Tony

#1
#!/bin/bash
ps ax | grep -v grep | grep -q xmatrix
if [ $? -eq 0 ]
then
hdparm -y /dev/sdb
hdparm -y /dev/sdc
hdparm -y /dev/sdd
hdparm -y /dev/sde
hdparm -y /dev/sdf
fi
exit


P.S. quando devi riportare del codice usa il tag code, non un colore diverso.
Inoltre, le prossime volte, cerca di essere più specifico.
Se un comando o uno script non funziona, è opportuno che riporti l'errore che il sistema ti dà.
Una domanda, poi.
Hai usato una & nel tuo script.
Lo hai fatto per un motivo specifico?
Perché io l'ho tolta. Messa così non aveva senso, anzi creava problemi.
Lo script, ovviamente, va reso esecutivo.
Inoltre, fa quello che deve fare una sola volta e poi esce, mentre, se la tua intenzione è quella di averlo sempre in esecuzione è opportuno utilizzare un ciclo while oppure eliminare l'ultima riga exit e sostituirla con exec $0
Prima potresti anche aggiungere una pausa tra i controlli con il comando sleep.

Linux non è solo un sistema operativo ma...
"È uno stato mentale, dove prima ti perdi e poi ti ritrovi"
(cit. Point Break).
Il mio pc.

Jacobbe73

Ciao Tony grazie per la tua tempestiva risposta!
Ho appreso i tuoi suggerimenti relativi alla modalità di scrittura post, starò più attento.
Per rispondere alle tue domande:
- l'errore del mio script non postato è il seguente:
Citazione/etc/init.d/stand-by: line 2: xmatrix: command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
- La & usata nel mio script deriva probabilmente da uno script da me "scopiazzato" in rete per raggiungere il mio scopo (poi siccome erano le 2 di notte probabilmente c'ho messo anche del mio  :palm:)
- lo script è già esecutivo
- ho bisogno che faccia una sola volta quello che deve fare
- gli sleep non li ho messi (anche se in questo caso ci avevo pensato) perchè ho notato che se eseguo lo script stesso (senza la prima parte del controllo sul processo in esecuzione) i comandi hdparm lanciati così in sequenza funzionano correttamente.
Adesso provo il tuo script e ti dico!
per adesso grazie
Jacobbe73

Jacobbe73

Allora Tony,
il tuo script funziona!  :ok:
Solo che è spuntato un altro problema (sull'esecuzione dal cron) però a questo punto apro un altro post dedicato per non fare confusione  :hmm:
Ringrazio per il prezioso supporto!
Saluti
Jacobbe73