Estou executando os seguintes comandos no 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:~#
Qual é o efeito sudo
no segundo comando? Por que o root precisa de sudo
?
Responder1
Ok, pesquisando isso no Google, encontrando issoResposta U&L, verificando seuhistórico de revisõese seguindo a fonte citada norevisão #1, este é umBug inicial; o problema é que ao mudar para root em execução, su
a $UPSTART_SESSION
variável de ambiente é transportada do ambiente anterior em vez de ser definida novamente.
Depois de muito bater a cabeça e pesquisar no Google, encontrei uma postagem (https://unix.stackexchange.com/questions/120050/sudo-service-vsftpd-returns-unknown-job-vsftpd) mostrando que
sudo service xxxx start
(ou pare ou reinicie)funciona, enquanto
`service xxxx start (em uma sessão su)
não funciona.
Portanto, o culpado foi claramente o ambiente: se você fizer root com "su" em vez de "sudo su" ou "su -", "service" também não funcionará corretamente, pois "su" carregará a maior parte do seu ambiente normal de usuário para a sessão raiz.
Após alguns testes, descobri que o culpado é a variável de ambiente UPSTART_SESSION, que vem definida quando você "su", mas não definida quando você "sudo su" ou "su -". Aqui estão alguns resultados de testes:
-- não funciona
jsveiga@dell:~$ su Password: root@dell:/home/jsveiga# service smbd restart stop: Unknown job: smbd start: Unknown job: smbd
-- funciona mesmo em uma sessão su
root@dell:/home/jsveiga# sudo service smbd restart smbd stop/waiting smbd start/running, process 3823
-- funciona
root@dell:/home/jsveiga# exit jsveiga@dell:~$ sudo su root@dell:/home/jsveiga# service smbd restart smbd stop/waiting smbd start/running, process 3862
-- funciona
root@dell:/home/jsveiga# exit jsveiga@dell:~$ su - Password: root@dell:~# service smbd restart smbd stop/waiting smbd start/running, process 3905
-- indo su e desativando o UPSTART_SESSION funciona
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
Portanto, os scripts de início/parada estão falhando de alguma forma simplesmente pela presença da
UPSTART_SESSION
variável de ambiente.BR, João S. Veiga
Para corrigir isso, basta unset $UPSTART_SESSION
:
unset UPSTART_SESSION
ou mude para root por outros meios, como su -
, sudo su
ou sudo -i
.
Responder2
Nesse contexto, não significa nada e deve ser removido. Sem especificar algum outro usuário, sudo
tenta se tornar root, e então se você já é root, isso é autônomo, a não ser criar um processo adicional (para sudo
si) que ocupa alguns recursos até que o comando que está executando termine.