
El crontab que uso es más complejo pero dividí el problema en un conjunto mínimo de problemas.
Mi crontab funciona así:
mypath='/home/user/opt/script_home'
myscript='/home/user/opt/script_home/myscript.py'
* * * * * "$myscript"
Pero no así:
mypath='/home/user/opt/script_home'
myscript="${mypath}/myscript.py"
* * * * * "$myscript"
Mensaje de error en maildir:
/bin/sh: ${mypath}/myscript.py: No such file or directory
El intérprete de Python está disponible en el cron restringido $PATH, por lo que ese no es el problema.
Editar: Además, si ejecuto crontab usando bash o sh, se ejecuta sin errores. (Después de eliminar * * * * * por supuesto)
Puede ser que me esté perdiendo algo muy básico aquí, pero lo entendí desde hace algún tiempo y busqué en la web. Pero hasta ahora no he tenido suerte con mis parámetros de búsqueda. El crontab funciona con el mal uso de la ruta común en varias posiciones, pero ese no es un buen código y, por lo tanto, me molesta. Por favor ayúdame a salir de mi agonía =)
Respuesta1
TL;DR: no puedes.
de acuerdo aman 5 crontab
La cadena de valor no se analiza para sustituciones ambientales o reemplazo de variables, por lo que líneas como
PATH = $HOME/bin:$PATH
no funcionará como cabría esperar.
cron
El analizador de 's no es tan poderoso como el bash
de '.
Respuesta2
Puede configurar mypath esta variable en el archivo .bash_profile o .bashrc y luego será accesible.
vi .bash_profile or vi .bashrc
luego agregue la ruta a continuación y guarde
mypath='/home/user/opt/script_home'
Respuesta3
Dado que cron no es un shell interactivo ni de inicio de sesión, no se obtienen ni .bashrc ni .bash_profile. Entonces, si define mypath en esos archivos, no tendrá esa variable mientras use cron. Hasta donde yo sé, la única manera de tenerlo en cron es definirlo directamente (es decir, sin sustituciones ambientales o reemplazo de variables, como se dijo antes) en el script crontab.