実行する必要がある Python ベースのサーバーがいくつかあり、Ubuntu Server ボックスを起動すると自動的に起動するようにしたいと考えています。このように実行する最適な方法は何ですか?
私はBashスクリプトを書いてScreenを使ってバックグラウンドで実行し、時々チェックできるようにしたいと思っていましたが、
echo screen -d -m python
問題なく動作します。
echo screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`
エラーメッセージも出ず、何も起こりません。これはスペースと関係があるのでしょうか? バッククォートで囲んだにもかかわらずでしょうか? また、次のことも試しました:
WEB="screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`"
echo $WEB
スペースをエスケープする方法として、しかしうまくいきませんでした。これを行う Bash スクリプトの方法は何ですか?
また、Bash スクリプトが動作したら、起動時に実行されるようにするにはどこに配置すればよいでしょうか?
答え1
パスワードの入力を要求しているために失敗しますsudo
。TTY が開いていないため、パスワードの入力を待っているだけです。または、実際にはすぐに失敗する可能性があります。これを root として実行している場合は、sudo として起動する必要はありません。
しかし、おそらくやりたいことは、tornadoDeploy.pyをデーモン化するように変更することです。つまり、セッションが開かれた状態で実行されないように、tornadoDeploy.py自体を切り離すということです。python-daemonize ライブラリこれを可能にする簡単なツールを提供します。これにより、プロセスをデーモン化しながらも、画面を操作する必要がなくなります。
答え2
置く
sudo -n python /home/matt/tornadoServer/tornadoDeploy.py &
/etc/rc.d/rc.local ファイルに記述します。または、ディストリビューションの同等のファイルに記述します。
スクリプトが適切に動作するデーモンであり、スクリプトの実行にパスワードを必要としないように sudo を設定していると仮定します。
読むこれ起動スクリプトについてこれPythonデーモンライブラリについて。また、トルネードを実行する必要はありませんか?実際のHTTPサーバーの背後?
答え3
Ubuntu (および Debian) で起動時にアプリケーションを起動する方法は、update-rc.d を使用してそれらをシステム サービスに変換することです。手順については、ここを参照してください。http://www.debuntu.org/how-to-manage-services-with-update-rc.d
特に他のユーザーが変更できる場合、root として実行されるものはすべて潜在的なセキュリティ上の脆弱性となることに注意してください。
答え4
rc.local から実行する場合は、/etc/sudoers を編集して、次の文字列をコメント化する必要もあります。
デフォルトの要件