[RISOLTO] Cron non esegue lo script

Aperto da Jacobbe73, Lunedì 29 Ottobre 2018, 21:52:44

Discussione precedente - Discussione successiva

Jacobbe73

Ciao a tutti,
sulla mia macchina Linux Mint 19.0 Mate, che uso come piccolo server domestico, ho necessità di fare eseguire uno script bash che grazie al prezioso supporto di questo forum sono riuscito a far funzionare.
Ho la certezza che il cron non lo esegue perchè se lo lancio in manuale (dal terminale) funziona e fa quello che deve.
L'istruzione di comando esecuzione script è scritta nel file cron "root" ed è la seguente:
Citazione* * * * * /home/mionome/Scrivania/SCRIPT/stand-by.sh #Stand-by hard disk
così com'è scritta dovrebbe venire eseguito lo script ogni minuto ma questo non accade. (ho messo una frequenza così alta per fare i test)

Ho controllato il file cron tramite comando crontab -e e sembrerebbe tutto apposto.
Accedendo come utente da terminale e facendo il crontab -e apro un file vuoto mentre se da terminale digito sudo crontab -e (quindi da root) vedo la mia istruzione.  :bonk:
Cosa posso verificare?
Grazie mille per il supporto, saluti
Jacobbe73

Tony

#1
Innanzitutto, se non hai esigenze specifiche, userei il crontab dell'user e non quello di root.
Quindi, cancella quest'ultimo con
sudo crontab -r
e ricominciamo.
Digita
crontab -e
Ti esce l'editor di testo.
Vai in fondo a tutto con le frecce.
Scrivi la riga
* * * * * /home/mionome/Scrivania/SCRIPT/stand-by.sh
Rispetta esattamente il percorso del tuo script, le maiuscole/minuscole...
Digita ctrl+o per salvare.
Ti propone un nome di salvataggio, accettalo col tasto invio.
Poi, esci con ctrl+x

Se vuoi verificare di aver scritto il job digita
crontab -l

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

Ok Tony, grazie per il celere supporto!
ho fatto tutto come da te indicato ma lo script non viene eseguito comunque.
Allora questo è lo stato:
loggato come user, al comando
Citazionesudo crontab -e
ho inserito
Citazione* * * * * /home/mionome/Scrivania/SCRIPT/stand-by.sh
Questa riga risulta essere l'unica nel crontab del mio user.
verificato anche con il comando
Citazionecrontab -l

Lo script "stand-by.sh" ha i permessi 775, il proprietario è il mio user ed è impostato l'opzione "consentire esecuzione del file come programma". Contiene le seguenti righe:
Citazione#!/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

Il confronto viene fatto se presente il processo "xmatrix" che è lo screen saver scelto e si attiva dopo un minuto di inattività nel desktop grafico.

La prova che effettuo per verificare se lo script viene eseguito è la seguente:
aspetto che intervenga lo screensaver e attendo poco più di un minuto. Dopodiché sblocco lo schermo e in shell interrogo lo stato dei miei 5 hdd tramite il comando hdparm -C /dev/sdb, /dev/sdc, /dev/sdd, ecc....
Purtroppo tutto questi device risultano nello stato di "active/idle" e non in stand-by.
Aggiungo anche questa cosa:
una volta che lo screensaver è in esecuzione (quindi vedo il processo "xmatrix" presente al mio comando "ps -A"), se eseguo manualmente lo script /home/mionome/Scrivania/SCRIPT/stand-by.sh vedo la corretta esecuzione dei comandi presenti nello script (tutti e 5 gli hdparm in sequenza) e i miei 5 hdd vanno in modalità stand-by  :bonk:
Spero di aver esporto tutti i dati necessari.
Ancora grazie per il supporto,
Jacobbe73

Tony

#3
Scusa ma non ho mai detto di usare sudo!
Anzi ti ho espressamente consigliato di non usare crontab come amministratore, se non hai esigenze specifiche che te lo impongano.
Quindi ripeti alla lettera ciò che ti ho scritto.
Inoltre, sei sicuro che gli hard disk non si risveglino automaticamente dopo aver sbloccato lo schermo?
In tal caso, è ovvio che hdparm -C ti dica che gli hard disk sono active/idle.
P.S. Un'altra cosa. Quando il pc va in standby ed esce il salvaschermo, cron funziona lo stesso?
Non ho questa certezza. Devo indagare e fare dei test. Chissà, potrebbe essere questo il problema.

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

CitazioneScusa ma non ho mai detto di usare sudo!
Scusa te, ho scritto sudo ma per errore :palm:
Effettivamente ho rimosso il cron di root con il sudo ma poi ho fatto il crontab -e senza sudo (quindi dell'utente loggato) per inserire la stringa citata.

CitazioneAnzi ti ho espressamente consigliato di non usare crontab come amministratore, se non hai esigenze specifiche che te lo impongano.
Quindi ripeti alla lettera ciò che ti ho scritto.
Ho seguito alla lettera le tue istruzioni

CitazioneInoltre, sei sicuro che gli hard disk non si risveglino automaticamente dopo aver sbloccato lo schermo?
Ho fatto una prova e dopo aver forzato manualmente ogni hard disk in stand-by (tramitre hdparm -y /dev/sd...), atteso l'inserimento dello screensaver e successivamente sbloccato il desktop, tutti gli hdd sono rimasti nello stato di stand-by. Confermo quindi che hdparm -C mi dice stand-by per ogni device.

CitazioneP.S. Un'altra cosa. Quando il pc va in standby ed esce il salvaschermo, cron funziona lo stesso?
Questo sinceramente non lo so, però se così fosse mi sembra una cavolata perchè sul cron si appoggiano molti servizi come software di backup dati, ecc e non credo questi si fermino per uno screen saver. In ogni caso se così fosse, allora avrei la necessità di modificare lo script appoggiandomi ad un servizio che valuti l'inattività del desktop....
Saluti e grazie ancora!
Jacobbe73

Tony

Citazione di: Jacobbe73 il Martedì 30 Ottobre 2018, 23:59:51
...se così fosse mi sembra una cavolata perchè sul cron si appoggiano molti servizi come software di backup dati, ecc e non credo questi si fermino per uno screen saver.
Lo penso anch'io, ma non so se parli solo di screensaver o di blocco schermo (cioè quando richiede la password per rientrare). In quest'ultimo caso forse si potrebbe bloccare cron, perché in fondo ci si è disconnessi come utente, quindi la cosa avrebbe un senso.
E poi per i backup credo che ci si appoggi di più ad anacron.
Non so,  non conosco così bene l'argomento  :hmm:

Ad ogni modo, tralasciamo queste considerazioni.
Per verificare se lo script effettivamente viene avviato da cron, puoi fare una modifica allo stesso, così:
#!/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
date > ~/funziona
exit


Come vedi, ho aggiunto la riga date > ~/funziona
In tal modo, se lo script viene effettivamente eseguito da cron, nella tua home, troverai un file chiamato "funziona" che contiene la data e l'ora di esecuzione.
Da l'esistenza del file e dalla data e ora di esecuzione potrai verificare se cron lo avvia o meno.
Prova e fammi sapere.

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

Ok Tony,
ho modificato lo script come da tuo suggerimento ed il file "funziona" nella home del mio utente compare!
Quindi lo script viene eseguito dal cron anche con lo screensaver attivato (perchè si attiva dopo 1 minuto) ma purtroppo, interrogando lo stato dei dischi con hdparm -C questi risultano in "active/idle".... :bonk:

Tony


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

Tony

Facciamo un altro test.
Modifica lo script così

#!/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
hdparm -C > ~/hdparm
fi
exit

Ora, come puoi notare, lo script viene eseguito e, se è attivo il salvaschermo, nella home dell'utente troverai il file "hdparm" con il risultato del comando hdparm -C
Quindi se effettivamente gli hard disk vengono sospesi risulterà da lì.

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

Allora fatto il test come suggerito.
Il file hdparm viene creato nella home del mio utente ma il suo contenuto risulta essere vuoto.
Inoltre da terminale se digito hdparm -C mi viene visualizzato l'help del comando.
Se digito hdparm -C /dev/sdb mi restituisce permission denied.
Per leggere lo stato di uno dei miei 5 dischi devo dare il sudo e quindi devo mettere la password
:roll:

Tony

Scusa ma anche per mettere in standby serve sudo?

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

Si, per mettere in stand-by (hdparm -y /dev/sdb) devo mettere il sudo davanti sennò ho permesso negato.

Tony

E allora è ovvio che non funziona!
Perciò ti avevo chiesto se avevi la necessità di usare il crontab come amministratore.
Allora devi usare
sudo crontab -e
e programmarlo a dovere.

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

Tony

Solo che mi pare che tu già l'abbia fatto.
Boh, allora non so dov'è l'inghippo.

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

Si Tony,
originariamente avevo impostato l'avvio di quello script nel crontab di root e non in quello del mio user ma non andava lo stesso  :bonk:
comunque riprovo a spostare il comando dal crontab del mio user a quello di root e verifico con le istruzioni che mi hai fornito se lo script viene eseguito.....
Per adesso un grosso ringraziamento per il tuo tempestivo e prezioso supporto, domani posto i risultati di queste prove.
Saluti
Jacobbe73

Tony

#15
Uff, uff.
Ce l'ho fatta.
Ho fatto degli esperimenti sul mio sistema proprio con hdparm creandomi uno script simile al tuo ed effettivamente non funzionava, finché ho capito il perché e tutto ha funzionato a dovere.
Allora, per prima cosa lo script va modificato così
#!/bin/bash
ps ax | grep -v grep | grep -q xmatrix
if [ $? -eq 0 ]
then
sudo hdparm -y /dev/sdb
sudo hdparm -y /dev/sdc
sudo hdparm -y /dev/sdd
sudo hdparm -y /dev/sde
sudo hdparm -y /dev/sdf
fi
exit


Mentre, riguardo crontab dai
sudo crontab -e
e usa la riga
* * * * * /home/mionome/Scrivania/SCRIPT/stand-by.sh

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

Tony

Jacobbe73 se ci sei batti un colpo.
A me funziona.

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, scusami ma ieri sera sono crollato....
Adesso provo subito!!!
:ok:

Jacobbe73

Grande Tony, funziona benissimo!!!!
tutto abbastanza chiaro, ma ti chiedo comunque una cosa:
hai fatto eseguire al cron di root (perchè la riga di esecuzione script è nel file cron di root e non in quello del mio user) lo script ma è stato necessario inserire il sudo anche se eseguito da root? effettivamente, dopo che è comparso lo screensaver (condizione necessaria per il confronto all'interno dello script) se apro una shell come utente ed eseguo lo script manualmente mi viene chiesta la password, invece se apro la shell come root lo script avviato manualmente viene eseguito senza richiesta password...
Un'ultima cosa a riguardo del comando hdparm (sfrutto al 100% la tua competenza  ;D)
Secondo te, se uno degli hard disk è occupato e quindi in movimento (trasferimento file da una cartella ad un'altra per un semplice backup dati) e questo riceve il comando hdparm -y (che forza lo stand-by) quest'ultimo viene ignorato oppure il disco va in stand-by per qualche istante e poi riprende il trasferimento?
Grazie infinite per il tuo supporto, sei stato gentilissimo oltre che molto competente a riguardo!!
:ok:
Saluti
Jacobbe73

Tony

#19
Citazione di: Jacobbe73 il Giovedì 01 Novembre 2018, 14:56:19
...è stato necessario inserire il sudo anche se eseguito da root?
:dry: a quanto pare.
Funziona anche se lasci lo script senza i sudo ma lo metti in crontab (sempre di amministratore) così
* * * * * sudo /home/mionome/Scrivania/SCRIPT/stand-by.sh
Se lo script appartiene già a root, non ci sarà bisogno di alcun sudo, né nello script stesso, né nel crontab amministrativo.
Di questa particolarità la guida non ne parla.

Citazione di: Jacobbe73 il Giovedì 01 Novembre 2018, 14:56:19
se uno degli hard disk è occupato e quindi in movimento (trasferimento file da una cartella ad un'altra per un semplice backup dati) e questo riceve il comando hdparm -y (che forza lo stand-by) quest'ultimo viene ignorato oppure il disco va in stand-by per qualche istante e poi riprende il trasferimento?
Basta provare. Io ho provato e pare che venga ignorato.

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

Tony

#20
La guida originale (in inglese, ovviamente) è molto più completa.
Ma, anche in tal caso, non è affatto chiara riguardo tale particolarità.

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

@Tony,
ancora grazie per il tuo supporto!
Un caloroso saluto
Jacobbe73

Tony


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