No se puede acceder a la variable de shell en la configuración de crontab

No se puede acceder a la variable de shell en la configuración de crontab

Tengo problemas para acceder a una variable de shell mientras ejecuto el trabajo cron. En realidad, creé un trabajo que imprime dos valores de variables de shell en un env.outputarchivo.

Estoy escribiendo un trabajo cron usando el comando $ crontab -e(sin usuario sudo).

Mi archivo de configuración de crontab se ve así: -

# 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

Entonces, ahora cuando veo el contenido del archivo env.output, obtengo este resultado

/home/ubuntu and ${HOME}/cronjobs

lo cual no se esperaba, asumí.

Quiero que mi salida se vea así: -

/home/ubuntu and /home/ubuntu/cronjobs

Sugiérame alguna forma de manejar este problema.

Respuesta1

Esta es una limitación del demonio cron. Mira esto desde elpágina de manual de crontab:

La cadena de valor esnoanalizado para sustituciones ambientales o reemplazo de variables, por lo que líneas como:

     PATH = $HOME/bin:$PATH

no funcionará como cabría esperar.

Puede solucionarlo, ya que bash trata la tilde ( ~) como una sustitución de $HOME. Por lo tanto utilice:

JOBS_PATH=~/cronjobs

Respuesta2

Tengo problemas para acceder a una variable de shell

HOMEtal como se define en la parte superior de un crontab, no es una variable de shell, es una variable de entorno.

No puede hacer referencia a variables de entorno en la parte superior de un crontab, ya que ningún shell las procesa y, por lo tanto, no se expanden (ni se interpretan literalmente).

Tendrás que configurar JOBS_PATHmanualmente:

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

información relacionada