Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

817
Vistas
Ejecute el script de python desde el script de Shell usando crontab

Tengo un script de shell main.sh que ejecuta un script de python main.py Cuando ejecuto el script main.sh manualmente, la ejecución está bien ( Nota : lo estoy ejecutando manualmente con el usuario root ) y el script de python funciona como se esperaba. Sin embargo, cuando intento lo mismo desde crontab , que ejecuta el script main.sh cada 30 minutos, entonces el script de python no se ejecuta (ya he hecho chmod u+x main.sh para que sea ejecutable)

El crontab que se muestra a continuación también es del usuario raíz.

mi archivo crontab: */30 * * * * /home/opc/python_scripts/main.sh >> /home/opc/cron.log .

mi archivo main.sh:

 #!/bin/bash output=$(sh /home/opc/python_scripts/url.sh) echo "$output" searchstring="url is up, login service is up and oc console is up" if [[ "$output" == *"$searchstring"* ]] ; then echo "URL is up" sudo python3 /home/opc/python_scripts/main.py >> /home/opc/pyfile.log else echo "URL is Down" sudo python3 /home/opc/python_scripts/disable_crr.py fi

Sé que está ingresando la primera condición if y también está imprimiendo la declaración "URL is up", tengo otro archivo de registro que registra esto. Cuando lo ejecuto manualmente, puedo ver que incluso el script de python se ejecuta correctamente, pero con crontab se atasca en echo "URL is up" , después de eso no ocurre ninguna ejecución.

Cosas que he hecho para resolver esto:

  1. He visto soluciones de preguntas similares como: llamar a un script de Python desde el script de shell cron , script de Shell: ejecutar un programa de Python desde un script de Shell , pero en todas estas preguntas el usuario no pudo ejecutar el script de Python desde el shell guión manualmente. Puedo ejecutarlo manualmente, pero si uso un cronjob , entonces tengo un problema.

  2. cuando ejecuté ls -la en el directorio donde se encuentran estos scripts, la propiedad de estos archivos era como:

 main.sh root root main.py opc opc

También agregué #!/usr/bin/env python3 en la parte superior de mi secuencia de comandos de python, ya que había visto esto como una solución en una pregunta similar pero no funcionó, solo funciona manualmente, no con crontab.

¿Cómo lo ejecuto con crontab?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¿Intentaste eliminar sudo ?

Sin embargo, dado que tiene que correr cada 30 minutos, también puede considerar:

  • programando directamente en python usando schedule
  • usando una biblioteca de python para escribir su archivo CronTab
  • ejecutándose en un entorno más aislado usando docker y programando con crontab la ejecución de docker
  • finalmente, si tiene acceso a él, puede considerar también usar cronjob en un clúster k8s et similia
over 4 years ago · Santiago Trujillo Denunciar

0

Está intentando ejecutar el script con sudo, pero cron no puede solicitarle la contraseña. Dado que este es el crontab de root, no debería necesitar usar sudo.

Si debe usar sudo en cron, debe designar esos comandos para que no tengan contraseña a través de /etc/sudoers. Algo a lo largo de estas líneas debería funcionar.

 opc ALL=(root) NOPASSWD: /home/opc/python_scripts/main.py
over 4 years ago · Santiago Trujillo Denunciar

0

Así que no sé cuál era el problema, pero lo resolví.

Cómo:

anteriormente, como mencioné en mi pregunta, había intentado las dos preguntas anteriores por separado.

  1. Ahora, lo que hice fue implementar la respuesta dada de Llamar a un script de python desde el script de shell cron en el que solo usé esta parte de la respuesta:
 #!/usr/bin/env bash dirName=`dirname $0` baseName=`basename $0` arg1=$1 arg2=$2 cd ${dirName} && python ./room_wise.py arg1 arg2
  1. de la segunda pregunta Shell Script: Ejecute un programa python desde dentro de un shell script , utilicé el método de respuesta 2 de João Víctor y reemplacé python con python3.

No entiendo completamente cuál era el problema, pero sí, cuando usé ambas soluciones juntas, comenzó a funcionar. Además, como otras personas han mencionado en esta publicación, no use sudo si está usando crontab de root y, de lo contrario, puede generar problemas de autorización. Esto lo resolvió, así que, si alguien tiene una mejor comprensión, agregue sus respuestas también.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda