2010-09-03 13 views
39

Comment puis-je stocker des variables dans mon crontab? Je réalise que ce n'est pas un shell mais que je veux avoir des constantes comme un chemin vers mon application ou autre chose?Variables dans crontab?

Pensées?

Répondre

68

Dans Vixie cron, qui est probablement le plus commun, vous pouvez le faire presque exactement comme un script shell.

VARIABLE=value 
PATH=/bin:/path/to/doathing 
0 0 * * * doathing.sh $VARIABLE 

La page man:

Une ligne active dans une crontab sera soit un paramètre d'environnement ou d'une commande cron. Un paramètre d'environnement est de la forme,

 name = value 

où les espaces autour du signe d'égalité (=) sont facultatifs, et les espaces non principaux suivants de la valeur fera partie de la valeur affectée pour nom. La chaîne de valeur peut être placée entre guillemets (simple ou double, mais en correspondance) pour préserver les espaces de début ou de fin. Le nom peut également être placé entre guillemets (simple ou double, mais assorti) pour préserver les blancs de début, de fin ou intérieurs.

Vous pouvez dire si vous avez Vixie cron en vérifiant la page man pour crontab; l'auteur sera Paul Vixie. Différents crons peuvent ou ne peuvent pas supporter cela (le cron de BusyBox par exemple, ne le fait pas), auquel cas votre meilleure option est d'envelopper votre commande dans un script shell et d'exécuter ce script à partir de cron à la place. En fait, c'est une bonne chose à faire pour quelque chose de compliqué.

+3

+1 C'est la réponse –

+0

Je suis revenu pour regarder cette question que j'ai posée il y a 3 ans. C'est drôle comme les choses vont hein? –

+12

Ce message est trompeur - cron ne prend en charge qu'un ensemble de variables spécifique défini dans la table cron; par exemple. HOME, MAILTO, SHELL, etc. Vous * ne pouvez pas * définir des variables personnalisées, par ex. FOO =/foo/dir. Je me suis dit que je posterais cela puisque ce message m'a conduit sur la mauvaise route pendant quelques heures. – Jmoney38

-8

Je ne suis pas vraiment un mec unix, donc je ne peux pas dire quoi que ce soit, mais cela semble être un bon endroit pour une étape de pré-traitement.

#define cmdpath /usr/bin/myfolder/cmd 
0,30 8-17 * * 1-5 cmdpath 
17 3 * * 1 cmdpath 

en cours d'exécution que dans mon C++ le préprocesseur de compilateur donne comme:

0,30 8-17 * * 1-5 /usr/bin/myfolder/cmd 
17 3 * * 1 /usr/bin/myfolder/cmd 

Ce qui semble être tout ce que vous vouliez.

+11

Quand tout ce que vous avez est un marteau, chaque problème ressemble à un clou. –

+2

Cela transforme le processus relativement simple d'édition d'une crontab avec 'crontab -e' en un processus en trois étapes d'édition de votre crontab, en invoquant cpp, et en installant la nouvelle crontab avec crontab $ filename – mkb

+0

@Matt: a) c'est ce que sont les scripts shell pour, et b) mais 'crontab -e' ne fait pas ce qu'il veut, donc ce n'est pas vraiment une réponse. –

2

Vous pouvez placer des variables d'environnement dans le crontab. Voir la page man pour crontab(5) pour plus de détails.