我正在使用 c#/soap 和 php 在 Windows 和 Linux 上开发一个跨平台项目。
这个想法是,当用户按下 Web 界面上的按钮时,它会发送一个肥皂请求,该请求将关闭服务器。
这在 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 开发服务器 sudo:pam_unix2(sudo:auth):对话失败 8 月 3 日 23:20:27 开发服务器 sudo:wwwrun:pam_authenticate:对话错误;TTY=未知;密码=/ ; 用户=根;COMMAND=/sbin/shutdown -h now
我现在不知道从哪里开始,对不起,如果我问了一个菜鸟问题,我对soap/linux/mono还很陌生。
更新 2 刚刚发现了其他东西,只有当浏览器在正在关闭的本地 PC 上运行时,它才能在 Windows 上运行。我已经尝试重定向命令的输出以查看它是否返回错误并且什么都没有,所以我无法找出它失败的原因。
更新 3 我刚刚发现了别的东西,我有两台 Windows PC、笔记本电脑和台式机,都是 Windows 7 x64,从桌面浏览器我可以执行肥皂请求来关闭笔记本电脑,反之亦然,但是,我遇到的问题与 Windows Server 和 Linux 一起使用,即使是本地的 Windows 服务器浏览器也不会让我通过肥皂请求自行关闭。有没有一种方法可以让 Windows 服务器允许我通过肥皂请求、本地和远程浏览器进行关机,以及如何解决 Linux 的问题。
更新 4 刚刚修复了 Windows 问题,我需要将 IIS 用户帐户添加为管理员以允许它执行关机,所以它只是 Linux 我现在有问题。