我正在使用此处或此处引用的著名代码在 Python 中执行守护程序,如下所示:
import sys, daemon
class test(daemon.Daemon):
def run(self):
self.db = somedb.connect() # connect to a DB
self.blah = 127
with open('blah0.txt', 'w') as f:
f.write(self.blah)
# doing lots of things here, modifying self.blah
def before_stop(self):
self.db.close() # properly close the DB (sync to disk, etc.)
with open('blah1.txt', 'w') as f:
f.write(self.blah)
daemon = test(pidfile='_.pid')
if 'start' == sys.argv[1]:
daemon.start()
elif 'stop' == sys.argv[1]:
daemon.before_stop() # AttributeError: test instance has no attribute 'blah'
daemon.stop()
问题是,在调用时./myscript.py stop
,daemon.before_stop()
不再引用self.blah
!
AttributeError:测试实例没有属性'blah'
因此,使用这种守护程序方法,在停止守护程序之前无法访问守护程序的变量......
问题:如何在之前访问守护程序类的变量:
停在
./myscript.py stop
被 SIGTERM 停止
(被杀?)
编辑:已解决,这是一个带有quit()
方法的工作守护程序代码。