Risposte:
Sì, puoi definire e utilizzare le variabili in questo modo. C'è una limitazione (che non hai ancora colpito nei tuoi esempi): la stringa sulla destra del =
segno viene interpretata letteralmente, con spazi iniziali rimossi, quindi non puoi usare costrutti come FOO=$BAR/qux
(es. PATH=$HOME/bin:$PATH
Non farà nulla di utile).
Questo è indicato nella documentazione, che puoi vedere eseguendo
man 5 crontab
(Nota che man crontab
mostra la documentazione del crontab
comando , nella sezione 1 del manuale; vuoi la documentazione del crontab
formato del file , nella sezione 5.)
Ho appena provato, sì, è possibile. Puoi capirlo con questo semplice esempio, inseriscilo nel tuo crontab
:
FOO = qwerty * * * * * echo $ FOO> ~ / out
E controlla il file ~/out
(aggiornato ogni minuto), dovrebbe contenere "qwerty"
.
Mentre i crontab di Linux supportano la definizione di alcune variabili che contengono valori letterali, non è molto utile oltre a condensare il testo lungo in una rappresentazione più breve o controllare alcune cose su cron stesso, come dove inviare l'output di posta elettronica.
La flessibilità è capire che la parte di comando della voce cron verrà passata /bin/sh -c
o definita dalla shell SHELL
sui sistemi che usano Vixie cron (quella normalmente installata sui sistemi Linux). Ciò significa che il resto della riga di comando è un semplice script di shell. NOTA: capire quale shell viene utilizzata. Su Linux /bin/sh
normalmente funziona /bin/bash
così il $( ... )
comando incorporato, ma non su sistemi più vecchi dove invece /bin/sh
capisce solo `
.
Ad esempio, ho una semplice linea crontab che archivia mensilmente un file MBX di messaggi salvati e lo comprime. Sembra così:
15 0 1 * * nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf
Verrà eseguito il primo di ogni mese alle 12:15, imposta un nuovo nome di file con CCYYMM, sposta il file corrente su un nuovo nome e comprimilo. La cosa da ricordare è che un senza escape %
(segno di percentuale) verrà trattato come una nuova riga e i dati che seguono verranno inviati come stdin per comandare prima del segno di percentuale. Ecco perché il normale date +Y+m
è scritto come date +\%Y\%m
sopra.
No, non è possibile un cronjob può contenere solo elementi cron. Non è un'opzione per creare uno script bash ed eseguire lo script bash tramite un cronjob?