Sistema operacional: centos 5.2
Descrição da cena:
Temos um projeto WEB que o cliente precisa para rodar como um usuário normal (como chb), e depois há um botão na página que pode ser desligado após clicar nele.
Método de implementação:
1. Código JAVA:
Copie o código do código da seguinte forma:
public static boolean shutDownForLinux() {
tentar {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} catch (IOException e) {
retornar falso;
}
retornar verdadeiro;
}
2. Modifique /etc/sudoers e adicione as seguintes informações no final:
chb ALL=NOPASSWD:/sbin/reboot,/sbin/poweroff
3. Defina para iniciar automaticamente o Tomcat na inicialização, modifique /etc/rc.d/rc.local e adicione o seguinte no final:
su chb -c "/opt/tomcat/bin/startup.sh"
Descrição do problema:
Para o processo java que inicia automaticamente sempre que o computador é ligado, o botão de desligamento na página não pode implementar a função de desligamento. No entanto, se você efetuar login no servidor através de ssh com a conta chb neste momento, elimine manualmente o tomcat. processo e, em seguida, reinicie o Tomcat, o botão de desligamento na página Funciona. Você sabe por que isso acontece? Está relacionado à ordem de carregamento do sudo? Ou está relacionado ao ambiente shell do usuário chb?
Análise do problema:
Ao analisar o processo JAVA iniciado na inicialização e o processo JAVA iniciado manualmente, descobrimos que tty é diferente. Em seguida, pesquisamos no Google a relação entre sudo e tty e descobrimos que sudo requer tty por padrão quando o sistema é inicializado, não há tty. e usamos o cliente ssh Faça login no servidor, mate o Tomcat e reinicie o Tomcat. Neste momento, você pode obter o tty como pts, para poder usar o comando sudo.
Solução:
Modificando o arquivo /etc/sudoers, altere
Requisitos padrões
Basta comentar