我已经使用 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 上运行完美,我对此非常满意。
但是,我有一个部署 shell 脚本,它使用 SSH 以身份登录mainuser
(这不是 sudoer),然后将工作目录更新到最新的部署版本。
这里的问题是需要重新启动服务,以便应用程序加载新的源文件。但是,mainuser
得到一个...
mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
...尝试停止它时。我必须运行sudo stop webapp
,但此用户无法执行此操作,因为他不是 sudoer。出于安全原因,我也不希望他成为 sudoer,而且我不想输入 sudo 密码。
那么我该如何允许mainuser
运行stop webapp
?start webapp
答案1
sudo 非常易于配置,您可以允许此用户执行一组有限的命令而无需输入密码。下面这行/etc/sudoers
应该可以满足您的要求:
mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp