GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo hacer que CRON llame en las RUTAS correctas

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

Linux
  1. Cómo programar trabajos de Cron con Crontab

  2. Cómo ejecutar un trabajo cron en días específicos de la semana

  3. Cómo obtener el estado de salida de un bucle en bash

  4. ¿Cómo obtener el PYTHONPATH en shell?

  5. ¿Cómo obtener la identificación del proceso para eliminar un proceso nohup?

Cómo usar cron en Linux

Cómo automatizar tareas en Linux usando Crontab

Cómo obtener el tamaño de un directorio en Linux

Cómo aprovechar al máximo Qmmp 1.0

¿Cómo obtener la distribución correcta del teclado en español?

¿Cómo obtengo mi dirección IP desde la línea de comandos?