我有一个我无法解释的最奇怪的问题。这个脚本在直接执行时工作正常,但在一台机器上通过crontab执行时无法正常工作,但在另一台机器的crontab上工作正常(同一操作系统,RHEL 6):
#!/usr/bin/python
from subprocess import Popen, PIPE
def notify_helpdesk(result):
...
def main():
proc = Popen("service auditd status", stdout=PIPE, shell=True)
result = proc.stdout.readline()
if "is running" not in result:
notify_helpdesk(result)
if __name__ == "__main__":
main()
直接执行./audit_checker.py,每次都执行正确的操作。
通过crontab执行,“result”始终为空(不是None,只是空白),导致调用notify_helpdesk。
是的,审计服务正在运行。
这是crontab条目:
0 * * * * /local/sbin/audit_checker.py
这个完全相同的脚本,在具有完全相同操作系统的另一台机器上,使用完全相同的Python版本(2.6.6),以及通过crontab完全相同的调用,与cronjob完全一样。
我尝试了这个替代方案并遇到了同样的问题:
proc = Popen("service auditd status", stdout=PIPE, shell=True)
out, err = proc.communicate()
if "is running" not in out:
notify_helpdesk(out)
if err:
notify_helpdesk(err)