web-dev-qa-db-fra.com

Impossible d'accéder à la variable shell dans la configuration crontab

J'ai des problèmes pour accéder à une variable shell lors de l'exécution du travail cron. En fait, j'ai créé un travail qui imprime deux valeurs de variable Shell dans un fichier env.output.

J'écris un travail cron en utilisant la commande $ crontab -e (sans l'utilisateur Sudo).

Mon fichier de configuration crontab ressemble à ceci: -

# varibales
Shell=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
     /usr/games:/usr/local/games
[email protected]
HOME=/home/ubuntu
JOBS_PATH=${HOME}/cronjobs

# Jobs
* * * * * echo "$HOME and $JOBS_PATH" >> ${HOME}/env.output 2>&1

Donc, maintenant, quand je vois le contenu du fichier env.output, je reçois cette sortie

/home/ubuntu and ${HOME}/cronjobs

ce qui n'est pas prévu, j'ai supposé.

Je veux que ma sortie ressemble à ceci: -

/home/ubuntu and /home/ubuntu/cronjobs

Suggérez-moi un moyen de gérer ce problème.

2

J'ai un problème pour accéder à une variable shell

HOME tel que défini en haut d'une crontab n'est pas une variable Shell, c'est une variable d'environnement.

Vous ne pouvez pas référencer les variables d'environnement au sommet d'une crontab, car aucun Shell ne les traite et elles ne sont donc pas développées (et interprétées littéralement).

Vous devrez définir JOBS_PATH manuellement:

# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...
2
kos

C'est une limitation du démon cron. Voir ceci depuis le page de manuel de crontab :

La chaîne de valeur est non analysée pour les substitutions d'environnement ou le remplacement de variables, ainsi des lignes telles que:

     PATH = $HOME/bin:$PATH

ne fonctionnera pas comme on peut s'y attendre.

Vous pouvez utiliser une solution de contournement, car bash considère le tilde (~) comme une substitution de $HOME. Utilisez donc:

JOBS_PATH=~/cronjobs
4
chaos