He estado mirando otras preguntas de desbordamiento de pila, pero no pude hacer que ninguna funcionara. Tengo un script de python que usa variables de entorno. Este script funciona exactamente como se planeó cuando se ejecuta directamente; sin embargo, me gustaría ejecutarlo como un trabajo cron cada minuto por el momento.
Actualmente en mi directorio cron.d tengo un archivo llamado scrapers que contiene:
* * * * * root /usr/bin/python3.5 /code/scraper.pyEsto ejecuta la secuencia de comandos de python pero la secuencia de comandos falla ya que en la secuencia de comandos utilizo dos variables de entorno.
Leí que debería agregar SHELL=/bin/bash al archivo cron, así que lo hice, pero esto no ayudó.
SHELL=/bin/bash * * * * * root /usr/bin/python3.5 /code/scraper.pyluego leo
En el crontab, antes de ordenar, agregue . $HOME/.perfil.
SHELL=/bin/bash * * * * * . $HOME/.profile; root /usr/bin/python3.5 /code/scraper.pypero esto hizo que el cron dejara de ejecutarse por completo. ¿Cuál es la mejor manera de 'enviar' las variables env al cron?
En lugar de ejecutar todo el ~/.profile , lo que haría sería mover las variables que deben compartirse entre sus trabajos cron y la cuenta que tiene el perfil, luego las buscaría en ~/.profile y en el cron trabajo.
El último intento que muestra en la pregunta no tiene el formato correcto. La identificación del usuario debería aparecer justo después de la información de programación, pero ha agregado la fuente del perfil antes de la identificación del usuario, lo que seguramente no puede funcionar.
Aquí hay una configuración de ejemplo que he probado aquí:
*/1 * * * * someuser . /tmp/t10/setenv && /usr/bin/python /tmp/t10/test.py Lo configuré para que se ejecute cada minuto con fines de prueba. Reemplace someuser con algo que tenga sentido. El script /tmp/t10/setenv que usé tenía esto:
export FOO=foovalue export BAR=barvalue El archivo /tmp/t10/test.py tenía esto:
import os print os.environ["FOO"], os.environ["BAR"]Mi cron me envía por correo electrónico el resultado de los scripts que ejecuta. Recibí un correo electrónico con esta salida:
foovalue barvaluePuede especificar sus dos variables de entorno por esto:
* * * * * root env A=1 B=2 /usr/bin/python3.5 /code/scraper.py env es un programa del sistema que ejecuta un programa específico con variables adicionales:
$ env A=1 B=2 /bin/sh -c 'echo $A$B' # or just 'sh': would search in $PATH 12