このコードを使用して、アプリケーションをデーモン化します。 start/stop/restart
を許可します 次のコマンドを使用してスクリプトを実行します。
python myscript.py start
python myscript.py stop
python myscript.py restart
これに加えて、サービスを制御するための init.d スクリプトもあります。これにより、オペレーティング システムの起動時にサービスを自動的に開始できます。
これは簡単な例です。コードをクラス内に移動し、run
から呼び出すだけです。 MyDeamon
内の関数 .
import sys
import time
from daemon import Daemon
class YourCode(object):
def run(self):
while True:
time.sleep(1)
class MyDaemon(Daemon):
def run(self):
# Or simply merge your code with MyDaemon.
your_code = YourCode()
your_code.run()
if __name__ == "__main__":
daemon = MyDaemon('/tmp/daemon-example.pid')
if len(sys.argv) == 2:
if 'start' == sys.argv[1]:
daemon.start()
elif 'stop' == sys.argv[1]:
daemon.stop()
elif 'restart' == sys.argv[1]:
daemon.restart()
else:
print "Unknown command"
sys.exit(2)
sys.exit(0)
else:
print "usage: %s start|stop|restart" % sys.argv[0]
sys.exit(2)
成り上がり
Upstart を使用しているオペレーティング システム (CentOS 6 など) を実行している場合は、Upstart を使用してサービスを管理することもできます。 Upstart を使用している場合は、スクリプトをそのまま維持し、次のようなものを /etc/init/my-service.conf
の下に追加するだけです。
start on started sshd
stop on runlevel [!2345]
exec /usr/bin/python /opt/my_service.py
respawn
その後、開始/停止/再起動を使用してサービスを管理できます。
例
start my-service
stop my-service
restart my-service
upstart を使用したより詳細な例は、こちらから入手できます。
システム
Systemd を使用するオペレーティング システム (CentOS 7 など) を実行している場合は、次の Stackoverflow の回答をご覧ください。
2 つの推奨事項を提供します。
監督者
1) supervisor
をインストールします パッケージ (詳細な手順はこちら):
sudo apt-get install supervisor
2) /etc/supervisor/conf.d/flashpolicyd.conf
でデーモンの構成ファイルを作成します。 :
[program:flashpolicyd]
directory=/path/to/project/root
environment=ENV_VARIABLE=example,OTHER_ENV_VARIABLE=example2
command=python flashpolicyd.py
autostart=true
autorestart=true
3) supervisor
を再起動します 新しい .conf
をロードする
supervisorctl update
supervisorctl restart flashpolicyd
systemd (Linux ディストリビューションで現在使用されている場合)
[Unit]
Description=My Python daemon
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/project/main.py
WorkingDirectory=/opt/project/
Environment=API_KEY=123456789
Environment=API_PASS=password
Restart=always
RestartSec=2
[Install]
WantedBy=sysinit.target
このファイルを /etc/systemd/system/my_daemon.service
に配置します systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block
を使用して有効にします .
ログを表示するには:
systemctl status my_daemon