운영 체제: 센토스 5.2
장면 설명:
고객이 일반 사용자(예: chb)로 실행해야 하는 WEB 프로젝트가 있는데, 페이지에 이를 클릭한 후 종료할 수 있는 버튼이 있습니다.
구현 방법:
1. 자바 코드:
다음과 같이 코드 코드를 복사합니다 .
공개 정적 부울 shutdownForLinux() {
노력하다 {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} 잡기(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 프로세스의 경우 페이지의 종료 버튼으로는 종료 기능을 구현할 수 없습니다. 그러나 이때 chb 계정으로 ssh를 통해 서버에 로그인하는 경우 tomcat을 수동으로 종료해야 합니다. 프로세스를 수행한 다음 Tomcat을 다시 시작하면 페이지의 종료 버튼이 작동합니다. 왜 이런지 아시나요? sudo 로딩 순서와 관련이 있나요? 아니면 chb 사용자 쉘 환경과 관련이 있습니까?
문제 분석:
부팅 시 시작된 JAVA 프로세스와 수동으로 시작된 JAVA 프로세스를 분석한 결과 tty가 다르다는 사실을 발견했습니다. 그런 다음 sudo와 tty의 관계를 검색한 결과 sudo에는 시스템 시작 시 기본적으로 tty가 필요하다는 사실을 발견했습니다. , ssh 클라이언트를 사용합니다. 서버에 로그인하고 tomcat을 종료한 후 tomcat을 다시 시작합니다. 이때 tty를 pts로 가져올 수 있으므로 sudo 명령을 사용할 수 있습니다.
해결책:
/etc/sudoers 파일을 수정하여 다음을 변경하십시오.
기본값이 필요합니다.
그냥 댓글로 달아주세요