LinuxでPythonサービスを継続的に実行するには? [閉鎖]

LinuxでPythonサービスを継続的に実行するには? [閉鎖]

私は最近Pythonを使ってサービスを作成しました。while True:サービスを実行する機能が含まれています。サービスのようなものを提供することが今回が初めてであり、クライアントに料金を請求することを考えると、経験豊富な開発者にはいくつかの基本的な質問があります(申し訳ありません)。

  1. 画面。現在のアプリケーションを実行するには、screenを使用します。 SSH経由でサーバーに接続し、画面に移動してpython service.pySSHを切断して閉じました。これが最善の方法ですか?他の人は何をしますか?以前はよく使っていましたが、crontab今は引き続きサービスが実行されています。

  2. すべてがそこにあるので、try:予期except:しないことが発生した場合は、私に電子メールを送信します。それでも画面が突然消えたら(なぜそのようなことが起こるのかわかりません)、電子メールが届かず、サービスが実際に機能していない間に快適に眠ります。人々は追加の通知を追加しますか?たとえば、プロセスに名前を付けてチェッカーを追加すると、プロセスが実行されていない場合は電子メールが届きますか?

  3. すべてをドッカーコンテナで梱包する必要がありますか?拡張する必要のないアプリケーションならどうなりますか?これは良いアプローチですか?

よろしくお願いします。

ベストアンサー1

あなたが言ったようにDockerイメージを作成して実行することはオプションです。

ただし、* nixシステムでのより簡単なアプローチは、Supervisordを使用してサービスを実行することです。それだけでなく、pythonさまざまなスクリプトを実行しました。これらの単純なWebサービスを固定する必要なしにFlaskアプリケーションを実行することもできます。perlshellrubysupervisordsupervisord

実際、レガシーアプリケーションの移行にDockerコンテナで複数のサービスを実行する必要がある場合は、ENTRYPOINTでSupervisordを使用しました。これはお勧めできませんが、コンテナ化とクラウドの基本的な哲学全体に反していますが、これを行う必要があります。たまにこんなことが。

supervisordUbuntuでは、次のようにインストールできます。

$ sudo apt install supervisor

その後、監督サービスを有効にします。

$ sudo systemctl enable supervisor
$ sudo systemctl start supervisor

サンプル構成ファイルは次のとおりです。

$ sudo vi /etc/supervisor/conf.d/service_name.conf
[program:service_name]
command=/usr/local/bin/python_script.py
directory=/home/app
user=app
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stdout_logfile = /var/log/supervisor/service_name.log
redirect_stderr = true

構成の自動再起動は、何らかの理由でサービスが終了した場合にサービスが再開されることを保証します。自動起動は、システムを再起動すると、システム起動時にスーパーバイザが起動するように有効になっている限り、サービスが起動することを保証します。

サービスを作成したら、次のように実行できます。

$ sudo supervisorctl start service_name

必要に応じてステータスを確認できます -

$ sudo supervisorctl stop service_name

使用中のサービスを停止するには -

$ sudo supervisorctl stop service_name

ここで詳細を読むことができます。http://supervisord.org/

おすすめ記事