Sistema operativo: centos 5.2
Descripción de la escena:
Tenemos un proyecto WEB que el cliente requiere ejecutar como un usuario normal (como chb), y luego hay un botón en la página que se puede cerrar después de hacer clic en él.
Método de implementación:
1. Código JAVA:
Copie el código de código de la siguiente manera:
público estático booleano ShutDownForLinux() {
intentar {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} captura (IOException e) {
devolver falso;
}
devolver verdadero;
}
2. Modifique /etc/sudoers y agregue la siguiente información al final:
chb ALL=NOPASSWD:/sbin/reboot,/sbin/poweroff
3. Configure para iniciar Tomcat automáticamente en el arranque, modifique /etc/rc.d/rc.local y agregue lo siguiente al final:
su chb -c "/opt/tomcat/bin/startup.sh"
Descripción del problema:
Para el proceso de Java que se inicia automáticamente cada vez que se enciende la computadora, el botón de apagado en la página no puede implementar la función de apagado. Sin embargo, si inicia sesión en el servidor a través de ssh con la cuenta chb en este momento, elimine manualmente el tomcat. proceso, y luego reinicie Tomcat, el botón de apagado en la página funciona. ¿Sabes por qué es esto? ¿Está relacionado con el orden de carga de sudo? ¿O está relacionado con el entorno de shell del usuario chb?
Análisis de problemas:
Al analizar el proceso JAVA iniciado en el arranque y el proceso JAVA iniciado manualmente, encontramos que tty es diferente. Luego buscamos en Google la relación entre sudo y tty y descubrimos que sudo requiere tty cuando se inicia el sistema, no hay tty. Y usamos el cliente ssh. Inicie sesión en el servidor, elimine tomcat y luego reinicie tomcat. En este momento, puede obtener tty como pts, por lo que puede usar el comando sudo.
Solución:
Modificando el archivo /etc/sudoers, cambie
Requisito predeterminado
Solo comentalo