gpt4 book ai didi

c# - 使用 c# 和 mono 关闭 linux

转载 作者:太空狗 更新时间:2023-10-30 00:43:15 25 4
gpt4 key购买 nike

我正在 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:x:0 将 wwwrun:www 组添加到/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,从桌面浏览器我可以执行 soap 请求以关闭笔记本电脑,反之亦然,但是,我遇到的问题是Windows Server 和 Linux,甚至 Windows 服务器浏览器的本地浏览器都不会让我通过 soap 请求自行关闭。有没有办法让 Windows 服务器允许我通过 soap 请求、本地和远程浏览器进行关闭,以及如何解决 Linux 的问题。

更新 4刚刚解决了 Windows 问题,我需要以管理员身份添加 IIS 用户帐户以允许它执行关机,所以它只是 Linux 我现在有问题。

最佳答案

我会替换

process.StartInfo.FileName = "shutdown";
process.StartInfo.Arguments = "-h now";

process.StartInfo.FileName = "/usr/bin/sudo";
process.StartInfo.Arguments = "/sbin/shutdown -h now";

并在 sudoers 文件中设置执行关闭脚本的帐户,并允许在没有密码的情况下执行/sbin/shutdown。

关于c# - 使用 c# 和 mono 关闭 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11803283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com