/etc/init/mms-agent.confにスクリプトを作成しました。
start on runlevel [2345]
stop on runlevel [06]
exec /usr/bin/env python /home/mms/mms-agent/agent.py >> /home/mms/agent.log 2>&1
MMSプロキシの開始/停止サービスは正常に機能しますが、「MMS」ユーザーとしてこのサービスを開始したいと思います。
次のようにスクリプトを変更しようとすると:
exec su mms -c "/usr/bin/env python /home/mms/mms-agent/agent.py >> /home/mms/agent.log 2>&1"
予想される1つ(su、bash +私のPythonスクリプト)の代わりに3つのプロセスが実行されています。
mms 8864 0.0 0.2 37816 1332 ? Ss 22:30 0:00 su mms -c /usr/bin/env python /home/mms/mms-agent/agent.py >> /home/mms/agent.log 2>&1
mms 8865 0.0 0.2 11452 1196 ? S 22:30 0:00 bash -c /usr/bin/env python /home/mms/mms-agent/agent.py >> /home/mms/agent.log 2>&1
mms 8866 4.0 1.8 54672 10640 ? Sl 22:30 0:00 python /home/mms/mms-agent/agent.py
それはどういう意味ですか?
root以外のユーザーとしてスクリプトを起動する最良の方法は何ですか?
ありがとう
添付:
exec start-stop-daemon --start -u mms --exec "/usr/bin/env python /home/mms/mms-agent/agent.py"
動作しません。エラーは発生しませんが、プロセスはまだ開始されていません。
ベストアンサー1
バラより他のユーザーとしてジョブを実行するUpstart マニュアルにあります。使用するstart-stop-daemon
ことが推奨される方法です。
私はちょっとした間違いをしました。start-stop-daemon
実行可能ファイルへのパスが必要なコマンドライン全体を渡しました。パラメータを別々に渡します。
呼び出しの別の問題は、start-stop-daemon
すべてのPythonプロセスをサービスのインスタンスと見なすように指示することです。これにより、関連していない他のPythonプロセスが終了する可能性があります。サービスに1つのインスタンスのみを実行させるには、pidfileを使用します。
exec start-stop-daemon --start -c mms -u mms -m -p /var/run/mms-agent.pid \
--startas /usr/bin/env -- python /home/mms/mms-agent/agent.py