GNU/Linux >> Linux の 問題 >  >> Linux

Pythonスクリプトをサービスとして実行するには?

このコードを使用して、アプリケーションをデーモン化します。 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


Linux
  1. 「find-exec{};?」を実行する方法

  2. LinuxでPerlスクリプトをシステムデーモンとして実行するにはどうすればよいですか?

  3. Linux で Python スクリプトをサービスまたはデーモンのように実行する方法

  1. PHPスクリプトをデーモンプロセスとして実行

  2. Python スクリプトで、PYTHONPATH を設定するにはどうすればよいですか?

  3. コマンド ラインから任意の場所で実行するスクリプトをインストールするにはどうすればよいですか?

  1. スクリプトをルートとして遡及的に実行する方法は?

  2. スクリプトを実行する方法??

  3. sbt をデーモンとして実行するには?