web-dev-qa-db-ja.com

Upstart:通常のユーザーがカスタムサービスを停止および開始できるようにする

起動時にupstartを使用してWebサーバーアプリケーションを起動しました。これはupstartスクリプトです:

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

これはUbuntuサーバー10.04 LTSで問題なく動作し、とても満足しています。

ただし、SSHを使用してmainuser(これはsudoerではありません)としてログインし、作業ディレクトリを最新のデプロイメントバージョンに更新するデプロイメントシェルスクリプトがあります。

ここでの問題は、アプリケーションが新しいソースファイルを読み込むようにサービスを再起動する必要があることです。ただし、mainuserは...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

...それを止めようとしたとき。 Sudo stop webappを実行する必要がありますが、sudoerではないため、このユーザーはこれを実行できません。セキュリティ上の理由から、彼をsudoerにしたくないし、Sudoパスワードを挿入したくない。

では、mainuserstop webappおよびstart webappを実行できるようにするにはどうすればよいですか?

16
Tom

Sudoは非常に構成可能であり、パスワードを要求せずに、このユーザーが限定された一連のコマンドを実行できるようにすることができます。 /etc/sudoersの次の行で、必要な処理を実行できます。

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp
31
mgorven