Betriebssystem: Centos 5.2
Szenenbeschreibung:
Wir haben ein WEB-Projekt, das der Kunde als normaler Benutzer ausführen muss (z. B. chb), und dann gibt es auf der Seite eine Schaltfläche, die nach dem Klicken geschlossen werden kann.
Implementierungsmethode:
1. JAVA-Code:
Kopieren Sie den Codecode wie folgt:
öffentlicher statischer boolescher Wert ShutDownForLinux() {
versuchen {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} Catch (IOException e) {
return false;
}
return true;
}
2. Ändern Sie /etc/sudoers und fügen Sie am Ende die folgenden Informationen hinzu:
chb ALL=NOPASSWD:/sbin/reboot,/sbin/poweroff
3. Legen Sie fest, dass Tomcat beim Booten automatisch gestartet wird, ändern Sie /etc/rc.d/rc.local und fügen Sie am Ende Folgendes hinzu:
su chb -c "/opt/tomcat/bin/startup.sh"
Problembeschreibung:
Für den Java-Prozess, der jedes Mal automatisch gestartet wird, wenn der Computer eingeschaltet wird, kann die Schaltfläche zum Herunterfahren auf der Seite die Funktion zum Herunterfahren nicht implementieren. Wenn Sie sich jedoch zu diesem Zeitpunkt über ssh mit dem chb-Konto beim Server anmelden, beenden Sie den Tomcat manuell Prozess, und starten Sie dann Tomcat neu. Die Schaltfläche zum Herunterfahren auf der Seite funktioniert. Wissen Sie, warum das so ist? Hängt es mit der Sudo-Ladereihenfolge zusammen? Oder hängt es mit der chb-Benutzer-Shell-Umgebung zusammen?
Problemanalyse:
Durch die Analyse des beim Booten gestarteten JAVA-Prozesses und des manuell gestarteten JAVA-Prozesses haben wir festgestellt, dass tty unterschiedlich ist. Dann haben wir die Beziehung zwischen sudo und tty gegoogelt und festgestellt, dass sudo standardmäßig tty benötigt , und wir verwenden den SSH-Client, um uns beim Server anzumelden, Tomcat zu beenden und dann Tomcat neu zu starten. Zu diesem Zeitpunkt können Sie den tty als pts abrufen, sodass Sie den Befehl sudo verwenden können.
Lösung:
Ändern Sie, indem Sie die Datei /etc/sudoers ändern
Standardvorgaben erforderlich
Kommentiere es einfach aus