为什么start-stop-daemon需要权限?
问题描述:
我写一个守护进程,我想用启动 - 停止 - 守护命令去做,但是当我在命令行中使用它,我得到:为什么start-stop-daemon需要权限?
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
start-stop-daemon: command not found
但是当我用sudo的使用它运行完美,但我需要它在后台进程运行,我认为这是不好的守护像使用sudo在bash脚本:
sudo start-stop-daemon --start --background ...
不是吗?当我从它删除sudo
它给了我命令未找到。我该如何解决它?如果在守护进程中使用sudo是错误的。
答
start-stop-daemon
也可以设置守护进程的用户ID。
这就是说,你通常会在/etc/rc.d
,这与root权限无论是从正在使用的这一周(的sysvinit,新贵,systemd的init
系统运行使用start-stop-daemon
从脚本。 ..)和/或从service(8)
命令。
所以,如果一个用户应该能够启动/停止服务(这是一个相当罕见的情况下),你应该使用sudoers
文件授予他们访问service
命令,用你的服务的名称强制第一个参数。
一般来说,编写你的服务,以便它可以在启动时或安装过程中简单地启动,并且只要它在运行,用户就可以使用它。如果用户需要能够启动和停止服务的实例,那么守护进程负责管理实例,并且实例管理器应该持续运行,然后用户通过套接字联系这个服务(这样,根本就不需要sudo
,这会让许多不安装sudo
的管理员的生活变得更容易)。
答
这取决于'/ etc/sudoers'中的设置。
如果环境被重置(默认), 以下路径定义 'secure_path' 包含/ sbin目录(摘自Ubuntu项目的/ etc/sudoers文件“):
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
否则,您需要提供完整的程序路径
/sbin/start-stop-daemon
您可能需要解释您期望命令执行的内容......例如,您尝试启动的守护程序以及您希望拥有它的用户是什么。 – ams 2014-09-01 16:36:23
我期望它运行一个程序 – user3996615 2014-09-01 16:50:07
如果你有一个守护进程可以在非完全非特权的情况下执行一些有用的操作,为什么你要使用'start-stop-daemon'? – tripleee 2014-09-01 16:52:57