我正在
Windows和
Linux上使用c#/ soap和php开发跨平台项目.
这个想法是,当用户按下Web界面上的按钮时,它会发送一个soap请求,该请求将关闭服务器.
这在Windows上正常工作但在Linux上工作不正常,我没有看到任何原因,因为当我在服务器上手动运行shutdown命令时它工作正常.
下面是我正在使用的代码
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版本工作正常.我究竟做错了什么.
为了清楚我试图关闭整个服务器,而不是应用程序.
感谢您的任何帮助,您可以提供
*更新*
谢谢你的建议,我想我已经到了某个地方.我发现mono使用janis方法在wwwrun下运行.
我已经使用wwwrun:x:0将wwwrun:www group添加到/ etc / groups,我不确定这是否正确,我不知道:x:0是为了什么.
我已将%wheel ALL =(ALL)NOPASSWD:/ sbin / shutdown添加到sudoers文件并重新启动apache.
当我运行soap服务来执行关闭时,我在/ var / log / messages中收到以下错误
Aug 3 23:28:01 dev-server sudo: pam_unix2(sudo:auth): conversation
failed
Aug 3 23:20:27 dev-server sudo: wwwrun : pam_authenticate:
Conversation error ; TTY=unknown ; PWD=/ ; USER=root ;
COMMAND=/sbin/shutdown -h now
我现在不知道从哪里开始,对不起,如果我问一些菜鸟问题,我对soap / linux / mono来说相当新.
更新2
刚刚发现了其他东西,只有当浏览器在正在关闭的本地PC上运行时,它才能在Windows上运行.我已经尝试重定向命令的输出,看它是否返回错误,什么也没有,所以我无法找出它失败的原因.
更新3
我刚刚发现了其他东西,我有两个Windows PC,笔记本电脑和台式机都是Windows 7 x64,从桌面浏览器我可以做肥皂请求关闭笔记本电脑,反之亦然,但是,我遇到的问题是Windows Server和Linux,即使是Windows服务器浏览器本地也不会让我通过soap请求关闭自己.有没有办法让我这样做,所以Windows服务器将允许我通过soap请求,本地和远程浏览器进行关机,如何解决Linux的问题.
更新4
刚刚解决了Windows问题,我需要以管理员身份添加IIS用户帐户以允许它执行关机,因此它只是Linux我现在遇到问题.