デーモンプロセスとしてpyinotifyを使用してスクリプトを起動します
-
21-12-2019 - |
質問
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の場合は、このスクリプト全体をデーモンプロセスとして実行することについてどう思いますか?
スクリプトをデーモンとして実行した場合は、デーモンをPyinotififyにも適用する必要がありますか?
私の最後の質問は、pyinotifyがデーモニー化されているかどうか私は間違いなくコールバックが必要ですか?私の場合、スクリプトが永久に実行され、システムの再起動/再起動時にのみ殺されるようにしたいだけです。
手動の介入なしでは、標準の起動スクリプトと同じように実行する必要があります。
FYI、
Ubuntu 12.04サーバーを実行しています。
事前にありがとう、 NAV
解決
Ubuntu 12.04では、アップスタートを使用して、システムサービス(あなたが望むものであるもの)としてiPyNotify依存プロセスを実行します。
個人的には、Pythonスクリプトをまったく変更しませんでした。私はそれが端末で罰金を鳴らしてから、次のようなアップスタート設定ファイルを作成しました。
/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!
所属していません StackOverflow