使用pyinotify作为守护进程启动脚本

时间:2014-06-03 22:28:16

标签: python-2.7 ubuntu-12.04 daemon pyinotify

关于使用pyinotify作为守护进程启动脚本,我有很多问题。

我有一些像这样的代码:

#!/usr/bin/env python

import sys
import pyinotify
import shutil
import glob

PACKAGES_DIR = '/var/my-packages'
PACKAGES_TEMP_DIR = '/var/www-data/package_temp'

wm = pyinotify.WatchManager()
mask = pyinotify.IN_MOVED_TO

class ProcessPackages(pyinotify.ProcessEvent):
    def process_IN_MOVED_TO(self, event):
        for directory in glob.glob(PACKAGES_TEMP_DIR + '/*'):
            shutil.move(directory, PACKAGES_DIR)

handler = ProcessPackages()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch(PACKAGES_TEMP_DIR, mask)

try:
    notifier.loop(daemonize=True, pid_file='/tmp/packages.pid',  stdout='/tmp/stdout.txt')
except pyinotify.NotifierError, err:
    print >> sys.stderr, err

我现在的问题是,如果我将daemonize参数设置为True,这是否意味着整个脚本作为守护程序运行,还是仅仅是pyinotify?

如果只是pyinotify,我将如何将整个脚本作为守护进程运行?

如果我将脚本作为守护进程运行,是否真的有必要将pyinotify作为守护进程?

我的最后一个问题是,如果pyinotify被守护,我肯定需要回调吗?在我的情况下,我只希望脚本永远运行并且仅在系统重启/重启时被杀死。

该脚本也应该像任何标准启动脚本一样运行,无需人工干预。

FYI,

我正在运行Ubuntu 12.04服务器。

提前致谢, NAV

1 个答案:

答案 0 :(得分:0)

我使用Upstart运行依赖于ipynotify的进程作为系统服务(这是你想要的,通过事物的声音) - 也在Ubuntu 12.04上。

就个人而言,我并没有修改python脚本 。我只是确保它在终端上运行正常,然后创建了一个像这样的upstart配置文件:

/etc/init/myservice.conf

description "MyService"
author "My Name"

start on runlevel [2345]
stop on runlevel [!2345]

# Automatically restart process if crashed
#respawn

exec su myuser -c "/usr/bin/python /path/to/myscript.py > /tmp/myscript.log 2>&1"

当你的init文件到位时,你想尝试sudo start myservice之类的东西,然后检查 /tmp/myscript.log 是否有任何错误。

HTH!