0
我在學習Python3,尤其是守護進程庫。我想用兩個可能的參數調用我的守護進程:start & stop。Python3守護進程庫
到目前爲止,我有這樣的代碼:
def start():
with context:
pidfile = open(Config.WDIR+scriptname+".pid",'w')
pidfile.write(str(getpid()))
pidfile.close()
feed_the_db()
def stop(pid):
try:
kill(int(pid),15)
except ProcessLookupError:
print("Nothing to kill… (No process with PID "+pid+")")
if __name__ == "__main__":
scriptname = sys.argv[0]
context = daemon.DaemonContext(
working_directory=Config.WDIR,
pidfile=lockfile.FileLock(Config.WDIR+scriptname),
stdout=sys.stdout,
stderr=sys.stderr)
try:
if sys.argv[1] == 'start':
start()
elif sys.argv[1] == 'stop':
try:
pidfile = open(Config.WDIR+scriptname+".pid",'r')
pid = pidfile.read()
pidfile.close()
remove(name+".pid")
print(name+" (PID "+pid+")")
stop(pid)
except FileNotFoundError:
print("Nothing to kill… ("+scriptname+".pid not found)")
else:
print("\nUnknown option : "+sys.argv[1]+"\n\nUsage "+sys.argv[0]+" <start|stop>\n")
except IndexError:
print("\nUsage "+sys.argv[0]+" <start|stop>\n")
它的工作,但我不知道如果我做正確的方式。
特別是,爲什麼我必須手動存儲PID。爲什麼它不包含在自動創建的文件中:
myhostname-a6982700.3392-7990643415029806679
或鎖定文件?
感謝你的答案Anarci。是的,這真的是我想要的。之所以我不想在Upstart上轉播,或者我們說systemd,是因爲我希望腳本能夠成爲平臺不可知論者......我只是在原型階段,當然我會嘗試將守護進程管理從在我最終的程序中的實際處理...我會看看argparse庫。 我對我在這裏得到的快速反應感到驚訝(這是我的第一篇文章),確實是這樣! 祝您有愉快的一天。 –
我明白了,在這種情況下,您肯定需要某種方法將進程中的pid傳遞給管理腳本。我將定義一個目錄,其中所有正在運行的腳本都會寫入一個以其pid命名的文件,然後在關閉時刪除該文件。這與守護進程無關。 –