[Bash] un paio di script per chi non gli funziona cron
Inviato: domenica 28 settembre 2008, 21:13
Ciao gente.
Dato che a me cron non ne voleva sapere di funzionare ho provato a costruirmi un piccolo script che mi potesse aiutare. Funziona bene, ma ci vuole una combinazione di due script (più quello che volete eseguire).
Partiamo dal primo: è un AlarmClock realizzato attraverso il comando sleep; il giorno di esecuzione e l'orario sono inseriti all'interno dello script. E' ovviamente migliorabile.
I comandi logger sono molto utili per il debug (scrivono sul syslog e su user.log)
Eseguire l'AlarmClock ha il difetto che blocca qualsiasi esecuzione successiva; eseguirlo in background è la soluzione ottimale, ma bisogna considerare il funzionamento dei processi in Linux: alla morte del padre, terminano tutti i figli. Quindi dobbiamo trovare il modo di sgangiare il processo dal padre. Qui ci viene in aiuto il comando nohup che permette proprio questo. E' dunque necessario un altro script (io l'ho chiamato bckp)
Mettete questo script all'avvio (io l'ho messo nelle sessioni di Gnome) ed avrete il vostro programmino che aspetta l'orario giusto per partire 
Spero di aver fatto cosa utile ai più.
Ciao
(z)
Dato che a me cron non ne voleva sapere di funzionare ho provato a costruirmi un piccolo script che mi potesse aiutare. Funziona bene, ma ci vuole una combinazione di due script (più quello che volete eseguire).
Partiamo dal primo: è un AlarmClock realizzato attraverso il comando sleep; il giorno di esecuzione e l'orario sono inseriti all'interno dello script. E' ovviamente migliorabile.
Codice: Seleziona tutto
#!/bin/bash
#
#
# GPL
#
logger In esecuzione...
# 1=Lunedì
# 2=Martedì
# 3=Mercoledì
# 4=Giovedì
# 5=Venerdì
# 6=Sabato
# 7=Domenica
if [ `date +%u` -ne "7" ]; then
logger fine!
exit 0
fi
alarm_hour="19"
alarm_min="00"
alarm_min=`expr $alarm_min "*" 60`
time_hour=`date +%H`
time_min=`date +%M`
time_min=`expr $time_min "*" 60`
#trap `exit 1` INT - questo non ho capito a che serva.
if [[ $alarm_hour -ge $time_hour || ($alarm_hour -eq $time_our && $alarm_min -ge $time_min) ]]; then
y=`expr $((alarm_hour-time_hour)) "*" 3600`
sleepfor=`expr $y + $alarm_min - $time_min`
logger Dormo per $sleepfor
sleep $sleepfor
fi
logger Partenza!
# QUI VA LA CHIAMATA AL VOSTRO SCRIPT
exit 0
Eseguire l'AlarmClock ha il difetto che blocca qualsiasi esecuzione successiva; eseguirlo in background è la soluzione ottimale, ma bisogna considerare il funzionamento dei processi in Linux: alla morte del padre, terminano tutti i figli. Quindi dobbiamo trovare il modo di sgangiare il processo dal padre. Qui ci viene in aiuto il comando nohup che permette proprio questo. E' dunque necessario un altro script (io l'ho chiamato bckp)
Codice: Seleziona tutto
#!/bin/bash
nohup /bin/bash ~/AlarmClock &
exit 0
Spero di aver fatto cosa utile ai più.
Ciao
(z)