Newsgroup: it.comp.os.linux.iniziare
Titolo: eseguire script il primo venerdì del mese

Buongiorno,
vorrei configurare cron per eseguire un script il primo venerdì di ogni 
mese;
inizialmente ho provato in questo modo:
00 8 1-7 * 5 root script.sh
ma veniva eseguito tutti i venerdì (ho scoperto poi che le condizioni 
vengono interpretate come "alternative")
Quindi ho provato a cercare su Google, ed ho visto che le soluzioni 
generalmente proposte erano di questo tipo:
00 8 1-7 * * if [ `date +%u` -eq 5 ]; then root script.sh;
Ma in questo modo non succede assolutamente nulla!
Ho pensato che fosse un problema di posizione della particella "root", 
quindi ho provato anche con
00 8 1-7 * * root if [ `date +%u` -eq 5 ]; then script.sh;
ma nulla neanche in questo caso.
Come posso fare? Forse mi converrebbe agire a livello di script anzichè 
di cron (ma preferirei la prima soluzione dato che dovrei implementare 
diversi job).
grazie
m.
-- 
"La legge, in Italia, è come l'onore delle puttane"
(Curzio Malaparte)

 
Aggiungo che, sì, mi sono ricordato di terminare la condizione "if" con 
il comando "FI" (nel copia&incolla era andato perso). Quindi le due 
righe in questione sono:
00 8 1-7 * * if [ `date +%u` -eq 5 ]; then root script.sh; fi
00 8 1-7 * * root if [ `date +%u` -eq 5 ]; then script.sh; fi


 00 8 1-7 * * root if [ `date +%u` -eq 5 ]; then script.sh;
dovrebbe bastare (stai editando /etc/crontab, vero?)
0 8 1-7 * * [ $(date +%u) -eq 5 ] && root /percorso/dello/script.sh

 
No, non funge (ovviamente ho provato indicando giorno e orario attuale) :-/
Sì, sto editando crontab


 00 8 1-7 * * root if [ `date +%u` -eq 5 ]; then script.sh; fi
Se stai modificando il file di sistema /etc/crontab allora 
la sintassi giusta e`:
00 8 1-7 * * root if [ `date +%u` -eq 5 ]; then /path/of/script.sh; fi
Altrimenti se stai modificando il file personale (dovrebbe
essere /var/spool/cron/root per l'utente root) invece:
00 8 1-7 * * if [ `date +%u` -eq 5 ]; then /path/of/script.sh; fi
Ma tu stai modificando /etc/crontab vero?
Ma hai capito che devi aggiungere il percorso assoluto 
dello script?
E` presente una linea vuota alla fine del file di crontab?
Cosa dicono /var/log/cron/info e /var/log/cron/error ?

 00 8 1-7 * * root if [ `date +%u` -eq 5 ]; then /path/of/script.sh; fi
Ehm...
Piu` corretto sarebbe:
00 8 1-7 * * root if [ `/bin/date +%u` -eq 5 ]; then /path/of/script.sh; fi

 
ho provato e, non so perché, cron rifiuta la sintassi date +
prova a vedere se la risolvi così, a me sembra funzionare:
0 8 1-7 * * [ `/bin/date | /bin/awk '{ print $1 }'` == "Sat" ] &&
root /percorso/dello/script.sh
metti l'abbreviazione del giorno in inglese e con l'iniziale in maiuscolo,
anche se date in shell te lo da in italiano

 anche se date in shell te lo da in italiano
mi sa che root va prima:
0 8 1-7 * * root [ `/bin/date | /bin/awk '{ print $1 }'` == "Sat" ]
&& /percorso/dello/script.sh

 mi sa che root va prima:
Mi sa che si dovrebbe leggere tutto il thread 
prima di replicare.

 prima di replicare.
scusa, non ti seguo. vuoi dire?

mallin.shetland ha scritto:

Non succede niente neanche così...
Comunque i file di log che mi hai indicato sul mio sistema (Fedora 8) 
non esistono, ma trovo dei file con nome tipo cron.YYMMDD, nei quali non 
c'è alcuna informazione utile.
Sì, il percorso dello script è corretto (non l'ho riportato interamente 
per comodità di lettura).
Al momento ho sistemato inserendo la condizione nello script stesso 
piuttosto che nel crontab... forse è meno "elegante" ma non mi va di 
incaponirmi su un problema simile.
grazie comunque


 
Proverò appena possibile (non posso mettere mano al pc interessato al 
momento).
Per ora, come dicevo, ho risolto inserendo la condizione direttamente 
nello script.
In pratica faccio eseguire il job tutti i venerdì, poi all'interno dello 
script verifico che il numero del giorno sia inferiore o uguale a 7; 
forse è poco elegante ma funziona :-)
Grazie anche a te
ciao
