[Risolto]Script che non funziona correttamente solo da cron

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
stefanoxjx
Prode Principiante
Messaggi: 225
Iscrizione: giovedì 5 aprile 2007, 22:00

[Risolto]Script che non funziona correttamente solo da cron

Messaggio da stefanoxjx »

Ciao a tutti, dopo mezza giornata di prove senza uscirne ho deciso di chiedere un vostro consiglio.
Ho creato questo script che dovrebbe montare un volume usb, eseguire un backup e poi smontare il volume.
Il problema è che se lancio lo script da riga di comando funziona, mentre se lo faccio eseguire tramite cron ad
una determinata ora mi dice sempre "Nessun volume collegato".
Secondo voi dove sta il problema?
Grazie.
Ciao.

Codice: Seleziona tutto

#!/bin/bash

#Nome del file di log
LogFile=backupD1USB
#Destinazione
Target=/mnt/hdusb
#ID dei dischi
D1="f0711322-ba4f-4917-9b66-1129a66a819d"
D2="9620fa0e-ee32-45fe-ba55-f8b4956a57af"

#Lock file per questo backup
mkdir   /tmp/backup
touch	/tmp/backup/D1USB

#Scrive sul logfile giorno e ora inizio backup
echo "Inizio procedura di backup il: "`date` >> /var/log/$LogFile.log

#Verifica quale dei dischi usb è collegato e monta il volume
blkid | grep f0711322-ba4f-4917-9b66-1129a66a819d
if [ $? -eq  0 ];
then
  #Scrive sul logfile l'id del disco
  echo -n "Disk ID: " >> /var/log/$LogFile.log
  echo $D1 >> /var/log/$LogFile.log
  /bin/mount UUID=f0711322-ba4f-4917-9b66-1129a66a819d $Target
fi

blkid | grep 9620fa0e-ee32-45fe-ba55-f8b4956a57af
if [ $? -eq  0 ];
then
  #Scrive sul logfile l'id del disco
  echo -n  "Disk ID: " >> /var/log/$LogFile.log
  echo $D2 >> /var/log/$LogFile.log
  /bin/mount UUID=9620fa0e-ee32-45fe-ba55-f8b4956a57af $Target
fi
echo "attendo 30 secondi"
sleep 30

#Se il volume risulta montato esegue il backup
df -h | grep hdusb
if [ $? -eq 0 ];
then
  echo "copio"
  cp -Rvu /dati/D1/* $Target/ > /var/log/$LogFile.txt
else
  echo "Nessun volume"
  echo "Nessun volume collegato" >> /var/log/$LogFile.log
fi


#Scrive sul logfile giorno e ora fine backup
echo "Fine procedura di backup il: "`date` >> /var/log/$LogFile.log
echo "------------------------------------------------------------------" >> /var/log/$LogFile.log

#Scrive sul disco un file di log con i dati riassuntivi dell'ultimo backup
/usr/bin/tail -n4 /var/log/backupD1B1.log > $Target/Backup.log

#smonta il volume
umount $Target

#Cancella lock file
rm /tmp/backup/D1USB

#Richiama lo script che spegne il computer se tutti i backup sono terminati
#/etc/scripts/spegni.sh
Ultima modifica di stefanoxjx il venerdì 12 settembre 2014, 15:05, modificato 2 volte in totale.
stefanoxjx
Prode Principiante
Messaggi: 225
Iscrizione: giovedì 5 aprile 2007, 22:00

Re: Problema son script...

Messaggio da stefanoxjx »

Dimenticavo di dire che fa il controllo per 2 volumi diversi da montare, ma comunque il volume collegato sarà sempre e solo uno dei due.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Problema son script...

Messaggio da Zoff »

Dovresti scegliere un titolo piu' descrittivo. Così piu' utenti saranno stimolati ad aiutarti.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Problema son script...

Messaggio da UbuNuovo »

Zoff ha ragione, faresti meglio a mettere un titolo descrittivo.

La struttura del programma la cambierei leggermente:

Codice: Seleziona tutto

if individuo disco1
	...
elif individuo disco2
	...
else messaggio e uscita
Altra cosa... crei il file '/tmp/backup/D1USB' e alla fine lo cancelli ma non lo utilizzi.
Comunque questi fatti non dovrebbero influire sul funzionamento dello script.

Il problema potrebbe essere blkid.
Ho fatto qualche esperimento:
Premesse:
Faccio le prove con due dischi usb di marche diverse ma entrambi da 1TB li chiamo disco1 e disco2
se non indicato diversamente, eseguo tutti i comandi da utente normale
ho il montaggio automatico.

Collego il disco1, aspetto il riconoscimento ed eseguo:

Codice: Seleziona tutto

8-) blkid
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
il disco non viene visto, (la periferica individuata è la chiavetta per la connessione ad internet).
Eseguo di nuovo il comando ma questa volta da root:

Codice: Seleziona tutto

8-) sudo !!
sudo blkid
[sudo] password for giovanni: 
/dev/sda1: UUID="6EDD-E91A" TYPE="vfat" 
/dev/sda5: UUID="15ab1716-e704-43b1-acd9-1d0f6423a7c5" TYPE="swap" 
/dev/sda6: UUID="d6f5e63a-2e75-43e2-9dd5-0d1f36fd7747" TYPE="ext4" 
/dev/sda7: UUID="6fdeba00-8343-4d64-83b6-9ce400cd5f61" TYPE="ext4" 
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
/dev/sdc1: LABEL="1T_SEAGATE" UUID="453d4d80-f8d7-4538-9d7f-c3e81044c14a" TYPE="ext4" 
ok, il disco è in /dev/sdc1

Smonto il disco1 (Rimuovi unità in sicurezza) e lo scollego, collego disco2 e poi eseguo:

Codice: Seleziona tutto

8-) blkid
/dev/sda1: UUID="6EDD-E91A" TYPE="vfat" 
/dev/sda5: UUID="15ab1716-e704-43b1-acd9-1d0f6423a7c5" TYPE="swap" 
/dev/sda6: UUID="d6f5e63a-2e75-43e2-9dd5-0d1f36fd7747" TYPE="ext4" 
/dev/sda7: UUID="6fdeba00-8343-4d64-83b6-9ce400cd5f61" TYPE="ext4" 
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
/dev/sdc1: LABEL="1T_SEAGATE" UUID="453d4d80-f8d7-4538-9d7f-c3e81044c14a" TYPE="ext4" 
l'output di blkid è preso dalla cache quindi mostra sempre i dati del disco1 invece di quelli di disco2!

Eseguo blkid senza prendere i dati dalla cache:

Codice: Seleziona tutto

8-) blkid -c /dev/null
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
sono tornato alla situazione di partenza!

Concludendo:
al posto di blkid prova ad usare:

Codice: Seleziona tutto

8-) ls /dev/disk/by-uuid -l
totale 0
lrwxrwxrwx 1 root root 10 set  9 10:48 15ab1716-e704-43b1-acd9-1d0f6423a7c5 -> ../../sda5
lrwxrwxrwx 1 root root 10 set  9 11:05 2ee71cd1-6742-4243-84fc-4c1bc3dd4eae -> ../../sdc1
lrwxrwxrwx 1 root root 10 set  9 10:48 6EDD-E91A -> ../../sda1
lrwxrwxrwx 1 root root 10 set  9 10:48 6fdeba00-8343-4d64-83b6-9ce400cd5f61 -> ../../sda7
lrwxrwxrwx 1 root root 10 set  9 10:48 d6f5e63a-2e75-43e2-9dd5-0d1f36fd7747 -> ../../sda6
che indica sempre i dati reali del momento.

Altrimenti il problema potrebbe essere nel comando eseguito da cron.
Salva l'Ucraina! 🇺🇦
stefanoxjx
Prode Principiante
Messaggi: 225
Iscrizione: giovedì 5 aprile 2007, 22:00

Re: Problema son script...

Messaggio da stefanoxjx »

Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4647526#p4647526][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Dovresti scegliere un titolo piu' descrittivo. Così piu' utenti saranno stimolati ad aiutarti.
Ti ringrazio del consiglio, poi rileggendo mi sono anche accorto che avevo anche sbagliato a scrivere :)
Spero che ora il titolo della discussione sia più esplicativo.
stefanoxjx
Prode Principiante
Messaggi: 225
Iscrizione: giovedì 5 aprile 2007, 22:00

Re: Problema son script...

Messaggio da stefanoxjx »

Fatto :)
La struttura del programma la cambierei leggermente:

Codice: Seleziona tutto

if individuo disco1
	...
elif individuo disco2
	...
else messaggio e uscita
Effettivamente come dici tu sarebbe più corretto, ma ho usato quella struttura perchè
comunque i due dischi non andranno mai collegati contemporaneamente.
Altra cosa... crei il file '/tmp/backup/D1USB' e alla fine lo cancelli ma non lo utilizzi.
Comunque questi fatti non dovrebbero influire sul funzionamento dello script.
No no, viene utilizzato.
Infatti, se guardi alla fine dello script, viene richiamato un altro script (spegni.sh) che verifica
se la cartella '/tmp/backup/' è vuota (fine di tutti i backup e quindi spegne) o se contiene
qualche file che sta a significare che ci sono ancora dei backup in corso.
Il problema potrebbe essere blkid.
Ho fatto qualche esperimento:
Premesse:
Faccio le prove con due dischi usb di marche diverse ma entrambi da 1TB li chiamo disco1 e disco2
se non indicato diversamente, eseguo tutti i comandi da utente normale
ho il montaggio automatico.

Collego il disco1, aspetto il riconoscimento ed eseguo:

Codice: Seleziona tutto

8-) blkid
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
il disco non viene visto, (la periferica individuata è la chiavetta per la connessione ad internet).
Eseguo di nuovo il comando ma questa volta da root:

Codice: Seleziona tutto

8-) sudo !!
sudo blkid
[sudo] password for giovanni: 
/dev/sda1: UUID="6EDD-E91A" TYPE="vfat" 
/dev/sda5: UUID="15ab1716-e704-43b1-acd9-1d0f6423a7c5" TYPE="swap" 
/dev/sda6: UUID="d6f5e63a-2e75-43e2-9dd5-0d1f36fd7747" TYPE="ext4" 
/dev/sda7: UUID="6fdeba00-8343-4d64-83b6-9ce400cd5f61" TYPE="ext4" 
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
/dev/sdc1: LABEL="1T_SEAGATE" UUID="453d4d80-f8d7-4538-9d7f-c3e81044c14a" TYPE="ext4" 
ok, il disco è in /dev/sdc1

Smonto il disco1 (Rimuovi unità in sicurezza) e lo scollego, collego disco2 e poi eseguo:

Codice: Seleziona tutto

8-) blkid
/dev/sda1: UUID="6EDD-E91A" TYPE="vfat" 
/dev/sda5: UUID="15ab1716-e704-43b1-acd9-1d0f6423a7c5" TYPE="swap" 
/dev/sda6: UUID="d6f5e63a-2e75-43e2-9dd5-0d1f36fd7747" TYPE="ext4" 
/dev/sda7: UUID="6fdeba00-8343-4d64-83b6-9ce400cd5f61" TYPE="ext4" 
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
/dev/sdc1: LABEL="1T_SEAGATE" UUID="453d4d80-f8d7-4538-9d7f-c3e81044c14a" TYPE="ext4" 
l'output di blkid è preso dalla cache quindi mostra sempre i dati del disco1 invece di quelli di disco2!

Eseguo blkid senza prendere i dati dalla cache:

Codice: Seleziona tutto

8-) blkid -c /dev/null
/dev/sr1: LABEL="COOP VOCE" TYPE="iso9660" 
sono tornato alla situazione di partenza!

Concludendo:
al posto di blkid prova ad usare:

Codice: Seleziona tutto

8-) ls /dev/disk/by-uuid -l
totale 0
lrwxrwxrwx 1 root root 10 set  9 10:48 15ab1716-e704-43b1-acd9-1d0f6423a7c5 -> ../../sda5
lrwxrwxrwx 1 root root 10 set  9 11:05 2ee71cd1-6742-4243-84fc-4c1bc3dd4eae -> ../../sdc1
lrwxrwxrwx 1 root root 10 set  9 10:48 6EDD-E91A -> ../../sda1
lrwxrwxrwx 1 root root 10 set  9 10:48 6fdeba00-8343-4d64-83b6-9ce400cd5f61 -> ../../sda7
lrwxrwxrwx 1 root root 10 set  9 10:48 d6f5e63a-2e75-43e2-9dd5-0d1f36fd7747 -> ../../sda6
che indica sempre i dati reali del momento.
Effettivamente questa cosa è venuta in mente anche a me questa mattina.
Appena ho un attimo faccio delle prove con il comando 'ls /dev/disk/by-uuid -l'
Altrimenti il problema potrebbe essere nel comando eseguito da cron.
No, lo script viene richiamato regolarmente, il problema sta proprio sulla parte della rilevazione e montaggio del volume :(
Vi faccio sapere come va a finire con ls al posto di blkid.
Grazie.
stefanoxjx
Prode Principiante
Messaggi: 225
Iscrizione: giovedì 5 aprile 2007, 22:00

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da stefanoxjx »

Prove effettuate, ed effettivamente usando 'ls -l /dev/disk/by-uuid' al posto di 'blkid' lo script funziona.
Vi ringrazio per l'aiuto, ormai stavo andando fuori di testa con questa cosa :)
Ciao.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da vaeVictis »

Con blkid non funziona perché è un comando contenuto in /sbin, che non dovrebbe essere una cartella nel PATH di cron.

Codice: Seleziona tutto

vaevictis@vaevictis-N56VV:~$ which blkid
/sbin/blkid
Prova, in caso fossi comunque interessato ad usarlo per altri motivi, a inserire il path assoluto del comando

Codice: Seleziona tutto

/sbin/blkid
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
stefanoxjx
Prode Principiante
Messaggi: 225
Iscrizione: giovedì 5 aprile 2007, 22:00

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da stefanoxjx »

Bravo, c'è anche il fattore del path che io non ho guardato o meglio l'ho guardato in parte ma nelle istruzioni sbagliate :(
Faccio un paio di prove :)
Grazie.
Ciao.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da vaeVictis »

Figurati.
Anzi fai sapere... non ho mai usato cron :D
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da UbuNuovo »

Cavolo, ho rivisto per caso questa discussione. Non mi sono arrivate le notifiche!
Il bello è che per sicurezza, anche se ci sono già, rientro sul forum dall'email di notifica. Bo?
Comunque mi fa piacere che tu abbia risolto, in un modo o nell'altro.
Il problema della cache di blkid comunque esiste e può influire in caso di cambio di disco.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da vaeVictis »

Il problema della cache di blkid comunque esiste e può influire in caso di cambio di disco
Mi spiegheresti meglio. Perdonami ma non ho compreso :)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da UbuNuovo »

prova a fare le prove dette sopra
Ultima modifica di UbuNuovo il venerdì 12 settembre 2014, 19:01, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da vaeVictis »

Ok, mi era sfuggito il riferimento :)
Grazie.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Risolto]Script che non funziona correttamente solo da c

Messaggio da UbuNuovo »

@stefanoxjx: visto che metti le mani allo script... se vuoi che il controllo sul file temporaneo funzioni, dovresti eseguire la cancellazione solo se la procedura di backup è andata a buon fine.
SE eseguito backup (oppure, SE eseguito backup e smontato il disco)
ALLORA rm /tmp/backup/D1USB
Com'è ora il file viene sempre cancellato e se /etc/scripts/spegni.sh fa il controllo sull'esistenza del file non lo troverà mai.
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite