あなたは(私が正しく理解されている場合)、アプリケーションをスタンドアロン実行するとして、あなたは他の(非Web)アプリケーションと同じように、これを扱うことができます。
プログラムをバックグラウンドで実行したい場合は、this receipeを読んでデーモンアプリケーションの作成方法を説明し、(トピック内の)このトピックに関するコメントを参考にしてください。
一方、アプリケーション(システムの起動時に起動する)で「システムデーモン」を作成する場合は、シェルスクリプトを使用します。システムのスタートアップスクリプトを作成する方法を知るには、マシン上の他のスタートアップスクリプトからインスピレーションを得ることができます。解決策は、python my_app.py &
(スタートアップスクリプトから)でバックグラウンドでプログラムを実行し、$!
変数を使用してプロセスのpidを取得し、ファイルに保存することです。この方法でプロセスを停止することもできます「pidファイル」を読んでkill
コマンドを使用してください(SIGINT
をプロセスに送信すると、アプリケーションではKeyboardInterrupt
例外が発生します)。
EDIT:あなたの質問のコメントで
、あなたはアプリケーションがクラッシュした/失敗した場合は再起動しないだろうが、それはあなたのシステム上の他のデーモンと同じだとするために(安全ではないだろうpython main.py &
を使用して言います例えば、Apacheがクラッシュした場合、それ自体は再起動しません)。クラッシュした場合にアプリケーションを再起動したい場合は、2番目のデーモンを作成する必要があります.2番目のデーモンは、アプリケーションが実行中であれば定期的にチェックし、必要に応じて再起動します。
ロギングについては、アプリケーションをstdout/stderr
に出力し、起動スクリプト(python main.py &> /path/to/app.log &
)からリダイレクトするか、logging
モジュールを使用してアプリケーションからログを処理することができます。
なぜデーモンとして実行しますか? – moraes
'python main.py 'で走るのはちょっと危険です。それが失敗するかクラッシュする場合、自動的に再起動して、デーモンがログファイルに書き込むようにします。 – fredrik
@fredrik私は、クラッシュの処理と私の答えへのログについての詳細を追加 – MatToufoutu