Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

387
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda