我正在使用Windows和Linux上的c#/ soap和php進行跨平臺項目。使用c#和mono關閉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版本正常工作。我究竟做錯了什麼。
只是要清楚我試圖關閉整個服務器,而不是應用程序。
感謝您的幫助,您可以提供
* UPDATE * 感謝您的建議,我想我找到感覺了。我發現mono使用janis方法在wwwrun下運行。
我已經使用wwwrun:x:0
將wwwrun:www組添加到/ etc/groups,我不確定這是否是正確的,我不知道:x:0是什麼。
我已將%wheel ALL = (ALL) NOPASSWD: /sbin/shutdown
添加到sudoers文件並重新啓動apache。
當我運行SOAP服務於/var/log/messages
8月3日23時28分01秒DEV-服務器須藤執行關閉我得到以下錯誤:模塊pam_unix2(須藤:AUTH):談話 失敗 Aug 3 23:20:27 dev-server sudo:wwwrun:pam_authenticate: 對話錯誤; TTY =未知; PWD = /; USER = root; COMMAND =/sbin目錄/ shutdown -h now中
我不知道在哪裏從這裏走了,對不起,如果我問的有點小白的問題,我是相當新的SOAP/Linux的/單。
更新2 剛剛發現別的東西,它適用於Windows僅當瀏覽器本地PC正被關閉運行。我試着重定向輸出命令,看看它是否返回錯誤,什麼都沒有,所以我找不到它失敗的原因。
更新3 我剛剛發現了別的東西,我有兩個窗口PC,筆記本電腦和臺式機在Windows 7 64位系統,從桌面瀏覽器,我可以做SOAP請求來關閉筆記本電腦,反之亦然,但是,我遇到的問題是Windows Server和Linux,即使本地Windows服務器瀏覽器也不會讓我通過soap請求關閉它。有沒有一種方法可以讓Windows服務器允許我通過soap請求,本地和遠程瀏覽器進行關閉操作,以及如何使用Linux修復問題。
UPDATE 4 剛纔已經固定在Windows的問題,我需要給IIS用戶帳戶添加爲管理員,以允許它執行關機,所以它只是Linux的我有一個問題,現在。
單用戶是否有權關閉服務器?默認情況下,只有root可以做到這一點 – janisz 2012-08-03 21:08:07
哦,真的,有沒有辦法讓單聲道能夠做到這一點 – Boardy 2012-08-03 21:18:09
[Here](http://stackoverflow.com/a/8497774/1387612)是應該工作的解決方案 – janisz 2012-08-04 15:23:59