私は、Windows と Linux で c#/soap と php を使用したクロスプラットフォーム プロジェクトに取り組んでいます。
これは、ユーザーが Web インターフェイスのボタンを押すと、サーバーをシャットダウンする SOAP 要求を送信するというものです。
これはWindowsでは正常に機能していますが、Linuxでは機能していません。サーバーでシャットダウンコマンドを手動で実行すると正常に機能しない理由はわかりません。
以下は私が使用しているコードです
public bool shutdownServer()
{
Process process = new Process();
if (CommonTasks.getOperatingSystem() == CommonTasks.OperatingSystemType.Windows)
{
process.StartInfo.FileName = "shutdown";
process.StartInfo.Arguments = "-s -t 0";
}
else if (CommonTasks.getOperatingSystem() == CommonTasks.OperatingSystemType.Linux)
{
process.StartInfo.FileName = "shutdown";
process.StartInfo.Arguments = "-h now";
}
else
{
return false;
}
library.logging(classDetails + MethodInfo.GetCurrentMethod().Name, string.Format("Shutting down with the following {0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments));
process.Start();
return true;
}
Linux セクションがシャットダウンを実行しない理由はわかりませんが、Windows バージョンは正常に動作します。私は何を間違っていますか。
明確にするために、アプリケーションではなく、サーバー全体をシャットダウンしようとしています。
あなたが提供できる助けをありがとう
*更新 * ご提案ありがとうございます。janis メソッドを使用して、モノが wwwrun の下で実行されていることがわかりました。
を使用して wwwrun:www グループを /etc/groups に追加しました。wwwrun:x:0
これが正しいかどうかはわかりません。:x:0 の目的がわかりません。
%wheel ALL = (ALL) NOPASSWD: /sbin/shutdown
sudoers ファイルに追加して、Apache を再起動しました。
SOAP サービスを実行してシャットダウンを実行すると、次のエラーが表示されます。/var/log/messages
8 月 3 日 23:28:01 dev-server sudo: pam_unix2(sudo:auth): 会話が失敗しました 8 月 3 日 23:20:27 dev-server sudo: wwwrun: pam_authenticate: 会話エラー。TTY=不明; PWD=/; ユーザー=ルート; COMMAND=/sbin/shutdown -h now
ここからどこへ行けばいいのかわかりません。ちょっと初歩的な質問をしていたらすみません。soap/linux/mono にはかなり慣れていません。
更新 2 別のことがわかりました。シャットダウン中のローカル PC でブラウザーが実行されている場合にのみ Windows で動作します。コマンドからの出力をリダイレクトして、エラーが返されるかどうかを確認しようとしましたが、何も返されないため、失敗する理由がわかりません。
更新 3 別のことを発見しました。2 つの Windows PC、ラップトップ、およびデスクトップがあり、両方とも Windows 7 x64 です。デスクトップ ブラウザから、SOAP 要求を実行してラップトップをシャットダウンすることも、その逆も可能ですが、私が抱えている問題はWindows Server と Linux では、Windows サーバー ブラウザーのローカルであっても、soap 要求を介して自分自身をシャットダウンすることはできません。WindowsサーバーでSOAPリクエスト、ローカルおよびリモートブラウザーを介してシャットダウンできるようにする方法と、Linuxで問題を解決するにはどうすればよいですか。
更新 4 Windows の問題を修正したばかりです。IIS ユーザー アカウントを管理者として追加して、シャットダウンを実行できるようにする必要があったため、現在 Linux に問題があります。