Операционная система: Centos 5.2.
Описание сцены:
У нас есть WEB-проект, который клиент должен запустить от имени обычного пользователя (например, chb), а на странице есть кнопка, которую можно закрыть после нажатия на нее.
Метод реализации:
1. JAVA-код:
Скопируйте код кода следующим образом:
public static boolean ShutDownForLinux() {
пытаться {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} catch (IOException e) {
вернуть ложь;
}
вернуть истину;
}
2. Измените /etc/sudoers и добавьте в конец следующую информацию:
chb ALL=NOPASSWD:/sbin/reboot,/sbin/poweroff
3. Установите автоматический запуск Tomcat при загрузке, измените /etc/rc.d/rc.local и добавьте в конце следующее:
su chb -c "/opt/tomcat/bin/startup.sh"
Описание проблемы:
Для процесса Java, который запускается автоматически при каждом включении компьютера, кнопка выключения на странице не может реализовать функцию выключения. Однако, если вы в это время войдете на сервер через ssh с учетной записью chb, вручную убейте tomcat. процесс, а затем перезапустите Tomcat, кнопка выключения на странице работает. Знаете ли вы, почему это так? Связано ли это с порядком загрузки sudo? Или это связано со средой пользовательской оболочки chb?
Анализ проблемы:
Проанализировав процесс JAVA, запущенный при загрузке, и процесс JAVA, запущенный вручную, мы обнаружили, что tty отличается. Затем мы погуглили связь между sudo и tty и обнаружили, что sudo по умолчанию требует tty. При запуске системы tty отсутствует. и мы используем ssh-клиент. Войдите на сервер, убейте tomcat и перезапустите tomcat. В это время вы можете получить tty как pts, чтобы использовать команду sudo.
Решение:
Изменив файл /etc/sudoers, измените
Требования по умолчанию
Просто прокомментируйте это