Système d'exploitation : centos 5.2
Description de la scène :
Nous avons un projet WEB que le client doit exécuter en tant qu'utilisateur normal (tel que chb), puis il y a un bouton sur la page qui peut être fermé après avoir cliqué dessus.
Méthode de mise en œuvre :
1.Code JAVA :
Copiez le code comme suit :
public statique booléen shutdownForLinux() {
essayer {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} catch (IOException e) {
renvoie faux ;
}
renvoie vrai ;
}
2. Modifiez /etc/sudoers et ajoutez les informations suivantes à la fin :
chb ALL=NOPASSWD:/sbin/reboot,/sbin/poweroff
3. Configurez pour démarrer automatiquement Tomcat au démarrage, modifiez /etc/rc.d/rc.local et ajoutez ce qui suit à la fin :
su chb -c "/opt/tomcat/bin/startup.sh"
Description du problème :
Pour le processus Java qui démarre automatiquement à chaque fois que l'ordinateur est allumé, le bouton d'arrêt sur la page ne peut pas implémenter la fonction d'arrêt. Cependant, si vous vous connectez au serveur via ssh avec le compte chb à ce moment, tuez manuellement Tomcat. processus, puis redémarrez Tomcat, le bouton d'arrêt sur la page Cela fonctionne. Savez-vous pourquoi c'est ? Est-ce lié à l'ordre de chargement sudo ? Ou est-ce lié à l'environnement shell utilisateur chb ?
Analyse du problème :
En analysant le processus JAVA démarré au démarrage et le processus JAVA démarré manuellement, nous avons constaté que tty est différent. Ensuite, nous avons recherché sur Google la relation entre sudo et tty et avons constaté que sudo nécessite tty par défaut. Lorsque le système démarre, il n'y a pas de tty. , et nous utilisons le client ssh. Connectez-vous au serveur, tuez Tomcat, puis redémarrez Tomcat. À ce stade, vous pouvez obtenir le tty en pts, vous pouvez donc utiliser la commande sudo.
Solution:
En modifiant le fichier /etc/sudoers, changez
Exigence de valeurs par défaut
Commentez-le simplement