Linux起動スクリプト/etc/initと特定のユーザー

Linux起動スクリプト/etc/initと特定のユーザー

/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

おすすめ記事