È possibile usare le variabili in crontab -e?


13

Posso dire:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

in crontab -e?

È possibile utilizzare le variabili in crontab -e?

Risposte:


15

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:$PATHNon farà nulla di utile).

Questo è indicato nella documentazione, che puoi vedere eseguendo

man 5 crontab

(Nota che man crontabmostra la documentazione del crontab comando , nella sezione 1 del manuale; vuoi la documentazione del crontab formato del file , nella sezione 5.)


7

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".


2
+1 a mostrare come l'OP potrebbe capire cose simili da solo.
Arthaey,

Un esempio migliore farà uso di $ FOO all'interno dello script di destinazione.
Acumenus,

4

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 -co definita dalla shell SHELLsui 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/shnormalmente funziona /bin/bashcosì il $( ... )comando incorporato, ma non su sistemi più vecchi dove invece /bin/shcapisce 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\%msopra.


-2

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?


1
Vero su alcuni altri unices, ma il cron di Linux supporta l'assegnazione delle variabili d'ambiente.
Gilles 'SO- smetti di essere malvagio'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.