Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

382
Views
Llamar para reiniciar un "servicio" en Linux desde el script Python que no funciona desde la entrada crontab

Tengo el siguiente script de prueba de python (extraído de un archivo .py mucho más grande) que estoy tratando de hacer funcionar en una instancia EC2 (instancia haproxy OpsWorks).

Parece haber una gran diferencia entre los permisos que se aplican cuando se ejecuta como una entrada cron y cuando se ejecuta como un script de python desde el shell.

Lo más cercano que he encontrado en otras publicaciones está aquí, pero está relacionado con los scripts de shell y, dado que estoy ejecutando python OK, las rutas deberían (espero) estar suficientemente configuradas para el cronjob.

Entorno: - Versión de Python: 2.6.8 - Entorno: instancia OpsWorks HAProxy, en EC2. - Ejecutándose como usuario: root.

Texto

 import subprocess import boto import logging if __name__ == '__main__': logging.getLogger().setLevel(boto.logging.INFO) command = ['service', 'haproxy', 'reload']; logging.info('Executing: %s' % command) #shell=FALSE for sudo to work. subprocess.call(command, shell=False)

Alternativamente, intenté llamar al comando de subproceso usando lo siguiente sin éxito.

 # subprocess.call("%s %s %s %s" % ('sudo', 'service', 'haproxy', 'reload'))

Salida cuando se ejecuta desde la línea de comando:

 [root@lb1 ~]# python tester.py INFO:root:Executing: ['service', 'haproxy', 'reload'] Reloading haproxy: [root@lb1 ~]#

Entrada crontab:

 [root@lb1 ~]# crontab -l */1 * * * * python ~/tester.py > ~/testlog 2>&1

Salida cuando se ejecuta como un comando crontab

 [root@lb1 ~]# cat testlog INFO:root:Executing: ['service', 'haproxy', 'reload'] Traceback (most recent call last): File "/root/tester.py", line 13, in <module> subprocess.call(command, shell=False) File "/usr/lib64/python2.6/subprocess.py", line 478, in call p = Popen(*popenargs, **kwargs) File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__ errread, errwrite) File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory

¡Estoy confundido en cuanto a por qué diablos arroja el error "No existe tal archivo o directorio"!

¿Alguien puede proporcionar algún consejo? Por cierto, esto es parte de una pieza de integración EC2 mucho más grande, por lo tanto, la importación de boto [es una buena manera de iniciar sesión en este caso]. Se ejecuta como root porque, al navegar por SO, es una mala práctica tener una entrada cron para una cuenta de usuario que se ejecuta con un comando sudo.

Salud,

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

En el conjunto de subprocesos shell=True

 subprocess.call(command, shell=True)

Creo que su problema se resolverá, pero es posible que surja un problema de Sudo.

over 4 years ago · Santiago Trujillo Report

0

Resulta que de hecho está relacionado con la ruta.

Información de ruta para cronjobs
Comandos en submódulos

Para resolverlo, proporcioné las siguientes entradas a través de crontab -e

 [root@lb1 ~]# crontab -l SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Ahora mi servicio se reinicia como se esperaba. ¡Hurra!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!