gpt4 book ai didi

python - crontab python子进程和服务重启

转载 作者:IT王子 更新时间:2023-10-29 01:26:44 27 4
gpt4 key购买 nike

我有一个小的 python 代码,可以在它不存在时重新启动 nginx。当我运行 sudo python monitor_server.py 时一切正常。当我尝试使用 root cron (sudo crontab -e) 对其进行 cron 时:
* * * * * python/root/monitor_server.py >/var/log/my_monitor/cron_log.log 2>&1我得到:

Traceback (most recent call last):
File "/root/monitor_server.py", line 19, in <module>
restart_service('mongod')
File "/root/monitor_server.py", line 10, in restart_service
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 642, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

代码:

def restart_service(name):
command = ['service', name, 'restart'];
#shell=FALSE for sudo to work.
subprocess.call(command, shell=False)

if __name__ == '__main__':
try:
f = urllib2.urlopen("<healthcheck URL>")
except (urllib2.HTTPError, urllib2.URLError) as e:
logging.log(logging.ERROR, 'restarting server')
restart_service('nginx')

最佳答案

尝试使用绝对路径调用命令,因为您在没有shell和另一个用户帐户下调用它,如果不指定绝对路径,某些命令将无法使用。

首先找到,命令所在位置:

$ which service
/usr/sbin/service

然后将您的代码更改为:

def restart_service(name):
command = ['/usr/sbin/service', name, 'restart'];
#shell=FALSE for sudo to work.
subprocess.call(command, shell=False)

关于python - crontab python子进程和服务重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24159230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com