起動時に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パスワードを挿入したくない。
では、mainuser
がstop webapp
およびstart webapp
を実行できるようにするにはどうすればよいですか?
Sudoは非常に構成可能であり、パスワードを要求せずに、このユーザーが限定された一連のコマンドを実行できるようにすることができます。 /etc/sudoers
の次の行で、必要な処理を実行できます。
mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp