Aufruf zum Neustart ein "service" in Linux von einem Python-Skript funktioniert nicht innerhalb von crontab-Eintrag

Habe ich das folgende python-test-Skript (extrahiert aus einem viel größeren .py-Datei), die ich versuche zu bekommen arbeiten auf einer EC2-Instanz (haproxy OpsWorks-instance).

Scheint es einen großen Unterschied zwischen den Berechtigungen angewendet werden, wenn die Ausführung als cron-Eintrag gegen zu laufen, wie ein python-Skript aus der shell.

Der nächste, den ich gefunden habe in anderen Beiträge ist hier aber das ist im Zusammenhang mit shell-Skripts und, da bin ich mit python OK, die Pfade sollten ( hoffe ich ) ausreichend konfiguriert für den cronjob.

Umgebung:
- Python-version: 2.6.8
- Umwelt: OpsWorks HAProxy Instanz, die auf EC2.
- Ausgeführt als Benutzer: root.

Skript

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)

Ich habe alternativ versucht, den Aufruf der Teilprozess-Befehl mit den folgenden ohne Erfolg.

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

Ausgabe beim ausführen von der Kommandozeile:

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

Crontab Eintrag:

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

Ausgabe bei der Ausführung als Befehl 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

Ich bin verwirrt, warum auf der Erde er wirft den "No such File or Directory" Fehler!

Kann mir jemand irgendwelche Hinweise? Übrigens dies ist Teil eines viel größeren EC2-integration-Stück - daher der boto-import [es ist ein schöner Weg, um die Protokollierung in diesem Beispiel]. Es läuft als root, weil das surfen SO ist, ist es schlechte Praxis, um eine cron-Eintrag für einen Benutzer-account läuft mit einem sudo-Befehl.

Cheers,

InformationsquelleAutor Al Sweetman | 2014-01-16
Schreibe einen Kommentar