我在 Ubuntu 14.04 中运行以下命令:
root@ubuntu:~# service rpki-ca restart
stop: Unknown job: rpki-ca
start: Unknown job: rpki-ca
root@ubuntu:~# sudo service rpki-ca restart
rpki-ca stop/waiting
rpki-ca start/running
root@ubuntu:~#
第二条命令中的 有什么作用sudo
?为什么 root 需要sudo
?
答案1
好的,谷歌搜索这个,找到这个U&L 答案,检查其修订历史并按照引用的来源修订 #1,这恰好是一个新贵错误;问题是,当切换到 root 运行时,su
环境$UPSTART_SESSION
变量是从以前的环境中带过来的,而不是再次设置。
经过一番苦思冥想和谷歌搜索后,我找到了一篇帖子(https://unix.stackexchange.com/questions/120050/sudo-service-vsftpd-returns-unknown-job-vsftpd) 表明
sudo service xxxx start
(或停止,或重新启动)有效,同时
`service xxxx start(在 su 会话中)
不起作用。
因此,罪魁祸首显然是环境:如果您使用“su”而不是“sudo su”或“su - ”来获取 root 权限,“服务”也无法正常工作,因为“su”会将您大部分正常用户环境带入 root 会话。
经过一些测试,我发现罪魁祸首是 UPSTART_SESSION 环境变量,该变量在“su”时设置,但在“sudo su”或“su -”时不会设置。以下是一些测试结果:
-- 不起作用
jsveiga@dell:~$ su Password: root@dell:/home/jsveiga# service smbd restart stop: Unknown job: smbd start: Unknown job: smbd
-- 即使在 su 会话中也可以工作
root@dell:/home/jsveiga# sudo service smbd restart smbd stop/waiting smbd start/running, process 3823
-- 作品
root@dell:/home/jsveiga# exit jsveiga@dell:~$ sudo su root@dell:/home/jsveiga# service smbd restart smbd stop/waiting smbd start/running, process 3862
-- 作品
root@dell:/home/jsveiga# exit jsveiga@dell:~$ su - Password: root@dell:~# service smbd restart smbd stop/waiting smbd start/running, process 3905
-- 转到 su 然后取消设置 UPSTART_SESSION 即可
root@dell:/home/jsveiga# exit jsveiga@dell:~$ su Password: root@dell:/home/jsveiga# service smbd restart stop: Unknown job: smbd start: Unknown job: smbd root@dell:/home/jsveiga# unset UPSTART_SESSION root@dell:/home/jsveiga# service smbd restart smbd stop/waiting smbd start/running, process 4244
因此,启动/停止脚本仅仅因为环境变量的存在而以某种方式失败
UPSTART_SESSION
。BR,Joao S Veiga
要修复此问题,只需取消设置$UPSTART_SESSION
:
unset UPSTART_SESSION
或者通过其他方式切换到 root,例如su -
或。sudo su
sudo -i
答案2
在这种情况下,它没有任何意义,应该被删除。在不指定其他用户的情况下,sudo
尝试成为 root,因此如果您已经是 root,则这是一个无操作,除了创建一个额外的进程(为sudo
自己),它会占用一些资源,直到它正在运行的命令完成。