获得了一个让用户通过设置向导的Django应用。向导完成后,该应用需要重新启动才能选择必要的设置。
该应用程序在Ubuntu 18.04上运行,并使用 supervisord 进行监控。
理想情况是希望从Django应用本身调用 systemctl restart administratord.service 。
所以我尝试了
import subprocess
subprocess.run("systemctl restart supervisord.service")
但是,此操作失败并显示以下错误:
FileNotFoundError [Errno 2]没有这样的文件或目录:'systemctl 重新启动supervisored.service':'systemctl重新启动supervisord.service'
SO上有this question,但这是一个比较老的问题,答案依赖于操作系统。* ,而截至发帖时,子流程似乎成为访问操作系统功能的首选方式
答案 0 :(得分:0)
看到我的错误。该命令应运行为:
subprocess.run(["systemctl", "restart", "supervisor.service"])
答案 1 :(得分:0)
更清洁的方式来启动自己的python程序是:-
import os
import sys
import psutil
import logging
def restart_program():
"""Restarts the current program, with file objects and descriptors
cleanup
"""
try:
p = psutil.Process(os.getpid())
for handler in p.get_open_files() + p.connections():
os.close(handler.fd)
except Exception, e:
logging.error(e)
python = sys.executable
os.execl(python, python, *sys.argv)