オペレーティング システム: セントス 5.2
シーンの説明:
顧客が通常のユーザー (chb など) として実行する必要がある WEB プロジェクトがあり、ページにはクリック後にシャットダウンできるボタンがあります。
実装方法:
1.JAVAコード:
次のようにコードをコピーします。
public static boolean shutDownForLinux() {
試す {
Runtime.getRuntime().exec("sudo /sbin/poweroff");
} キャッチ (IOException e) {
false を返します。
}
true を返します。
}
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 ファイルを変更することで、次のように変更します。
デフォルトは必須です
コメントアウトするだけです