Hallo、Linuxサービス/デーモンとしてのPythonスクリプト
私はpythonスクリプトを(ubuntu)Linux上でサービス(デーモン)として実行しようとしています。
は、ウェブ上のようないくつかのソリューションが存在する:
http://pypi.python.org/pypi/python-daemon/
A行儀のUnixデーモンプロセスが権利を取得するのが難しいですが、必要な手順は非常にすべてのデーモンプログラムで同じです。 DaemonContextインスタンスは、プログラムの動作と構成されたプロセス環境を保持します。コンテキストマネージャーとしてインスタンスを使用してデーモン状態を入力します。
:しかし、私はUbuntuは私の解決策は、init.dスクリプトimport signal import time import multiprocessing stop_event = multiprocessing.Event() def stop(signum, frame): stop_event.set() signal.signal(signal.SIGTERM, stop) if __name__ == '__main__': while not stop_event.is_set(): time.sleep(3)
#!/bin/bash WORK_DIR="/var/lib/foo" DAEMON="/usr/bin/python" ARGS="/opt/foo/linux_service.py" PIDFILE="/var/run/foo.pid" USER="foo" case "$1" in start) echo "Starting server" mkdir -p "$WORK_DIR" /sbin/start-stop-daemon --start --pidfile $PIDFILE \ --user $USER --group $USER \ -b --make-pidfile \ --chuid $USER \ --exec $DAEMON $ARGS ;; stop) echo "Stopping server" /sbin/start-stop-daemon --stop --pidfile $PIDFILE --verbose ;; *) echo "Usage: /etc/init.d/$USER {start|stop}" exit 1 ;; esac exit 0
とPythonでとの組み合わせであるLinuxに特異的に私のPythonスクリプトを統合したいと
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
私の質問は、このアプローチが正しい場合です。追加の信号を処理する必要がありますか?それは "正常に動作するUnixデーモンプロセス"ですか?
あなたは右、成り上がりは、今日の標準であります!上記のスクリプトはSIGTERMを処理するので、あなたの設定ファイルでOKになるはずです:) – tauran
スクリプトを起動するように変更しました。それは正常に動作します。 – tauran
今作った1つの追加調整。あなたのpythonスクリプトがvirtualenvの下で実行されている場合は、環境から実行可能なPython実行ファイルを使用するためにupstartを変更するだけです: 'exec /home/user/.env/environ/bin/python/some/dir/script.py' –