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.output
archivo.
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
HOME
tal 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_PATH
manualmente:
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...