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
두 번째 명령 의 효과는 무엇입니까 ? 왜 루트가 필요합니까 sudo
?
답변1
응, 구글링해서 이걸 찾아냈어U&L 답변, 확인 중개정 내역그리고 인용된 소스를 따라가면개정판 #1, 이것은 우연히신생 버그; 문제는 루트 실행으로 전환할 때 환경 변수가 다시 설정되는 대신 이전 환경에서 전달된다는 것 su
입니다 $UPSTART_SESSION
.
열심히 검색하고 검색한 끝에 게시물을 발견했습니다(https://unix.stackexchange.com/questions/120050/sudo-service-vsftpd-returns-unknown-job-vsftpd) 이를 보여주는
sudo service xxxx start
(또는 중지하거나 다시 시작)작동하는 동안
`service xxxx start(su 세션에서)
작동하지 않습니다.
따라서 범인은 분명히 환경이었습니다. "sudo su" 또는 "su -" 대신 "su"를 사용하여 루트로 이동하면 "su"가 일반 사용자 환경의 대부분을 수행하므로 "service"도 제대로 작동하지 않습니다. 루트 세션으로.
몇 가지 테스트를 거친 후, "su"를 실행할 때는 설정되지만 "sudo su" 또는 "su -"를 사용할 때는 설정되지 않는 UPSTART_SESSION 환경 변수가 원인이라는 사실을 발견했습니다. 다음은 몇 가지 테스트 결과입니다.
-- 작동하지 않습니다
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
또는 su -
, 와 같은 다른 방법으로 루트로 전환하세요 .sudo su
sudo -i
답변2
그러한 맥락에서는 아무 의미가 없으므로 제거해야 합니다. 다른 사용자를 지정하지 않고 루트가 되려고 시도하므로 이미 루트인 경우 실행 중인 명령이 완료될 때까지 일부 리소스를 차지하는 sudo
추가 프로세스(자체)를 만드는 것 외에는 아무 작업도 하지 않습니다 .sudo