Réponses:
Oui, vous pouvez définir et utiliser des variables de cette manière. Il y a une limitation (que vous n'avez pas rencontrée dans vos exemples): la chaîne à droite du =
signe est interprétée littéralement, avec des espaces de tête supprimés, vous ne pouvez donc pas utiliser de constructions comme FOO=$BAR/qux
(par exemple PATH=$HOME/bin:$PATH
, ne fera rien d'utile).
Ceci est indiqué dans la documentation, que vous pouvez voir en exécutant
man 5 crontab
(Notez que man crontab
montre la documentation de la crontab
commande , dans la section 1 du manuel; vous voulez la documentation du crontab
format de fichier , dans la section 5.)
Je viens de faire un essai, oui c'est possible. Vous pouvez le comprendre avec cet exemple simple, mettez-le dans votre crontab
:
FOO = qwerty * * * * * echo $ FOO> ~ / out
Et vérifiez le fichier ~/out
(mis à jour toutes les minutes), il doit contenir "qwerty"
.
Bien que les crontabs Linux prennent en charge la définition de certaines variables qui contiennent des valeurs littérales, cela ne sert pas à grand chose en plus de condenser un texte long en une représentation plus courte ou de contrôler certaines choses à propos de cron lui-même, comme où envoyer la sortie des e-mails.
La flexibilité consiste à comprendre que la partie commande de l'entrée cron sera passée à /bin/sh -c
ou le shell défini avec SHELL
sur les systèmes utilisant Vixie cron (celui habituellement installé sur les systèmes Linux). Cela signifie que le reste de la ligne de commande est un simple script shell. REMARQUE: réalisez quel shell est utilisé. Sous Linux, /bin/sh
c'est normalement /bin/bash
ainsi que la $( ... )
commande intégrée fonctionne, mais elle ne le serait pas sur les anciens systèmes où /bin/sh
seulement comprend à la `
place.
Par exemple, j'ai une simple ligne crontab qui archive un fichier MBX de messages enregistrés chaque mois et le compresse. Cela ressemble à ceci:
15 0 1 * * nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf
Cela s'exécutera le premier de chaque mois à 00h15, définira un nouveau nom de fichier avec CCYYMM, déplacera le fichier actuel vers un nouveau nom et le compressera. La chose à retenir est qu'un caractère non échappé %
(signe de pourcentage) sera traité comme une nouvelle ligne et les données qui le suivront seront envoyées en tant que stdin à la commande précédant le signe de pourcentage. C'est pourquoi la normale date +Y+m
est écrite comme date +\%Y\%m
ci-dessus.
Non, un cronjob ne peut contenir que des éléments cron. N'est-ce pas une option pour créer un script bash et exécuter le script bash via un cronjob?