Lo más probable es que cron se esté ejecutando en un entorno muy escaso. Compruebe las variables de entorno que utiliza cron agregando un trabajo ficticio que vuelca env
a un archivo como este:
* * * * * env > env_dump.txt
Compare eso con la salida de env
en una sesión de shell normal.
Puede anteponer sus propias variables de entorno al crontab local definiéndolas en la parte superior de su crontab.
Aquí hay una solución rápida para anteponer $PATH
al crontab actual:
# echo PATH=$PATH > tmp.cron
# echo >> tmp.cron
# crontab -l >> tmp.cron
# crontab tmp.cron
El crontab resultante se verá similar a la respuesta de chrissygormley, con PATH definido antes que las reglas de crontab.
Debes poner rutas completas en tu crontab
. Esa es la opción más segura.
Si no desea hacer eso, puede colocar un script de envoltorio alrededor de sus programas y establecer la RUTA allí.
por ejemplo
01 01 * * * command
se convierte en:
01 01 * * * /full/path/to/command
También cualquier cosa llamada desde cron
debe tener mucho cuidado con los programas que ejecuta, y probablemente establezca su propia elección para el PATH
variables.
EDITAR:
Si no sabe dónde está el comando que desea ejecutar which <command>
de tu caparazón y te dirá el camino.
EDIT2:
Entonces, una vez que su programa se esté ejecutando, lo primero que debe hacer es configurar PATH
y cualquier otra variable requerida (por ejemplo, LD_LIBRARY_PATH
) a los valores necesarios para que se ejecute el script.
Básicamente, en lugar de pensar en cómo modificar el entorno cron para que sea más adecuado para su programa/secuencia de comandos, haga que su secuencia de comandos maneje el entorno que se le proporciona, configurando uno apropiado cuando se inicie.
Usé /etc/crontab
. Usé vi
e ingresé las RUTAS que necesitaba en este archivo y lo ejecuté como root. El crontab normal sobrescribe las RUTAS que ha configurado. Un buen tutorial sobre cómo hacer esto.
El archivo cron de todo el sistema se ve así:
This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
42 6 * * * root run-parts --report /etc/cron.daily
47 6 * * 7 root run-parts --report /etc/cron.weekly
52 6 1 * * root run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py