日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux以非root身份运行,以非root用户身份在linux中运行mono-service

發(fā)布時間:2025/4/16 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux以非root身份运行,以非root用户身份在linux中运行mono-service 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我需要在嵌入式系統(tǒng)上以最低Ubuntu安裝方式運(yùn)行.net C#應(yīng)用程序(在Windows系統(tǒng)上開發(fā))作為服務(wù)/守護(hù)程序(不包括X,除服務(wù)器外SSH,只有相關(guān)的軟件)。我創(chuàng)建了一個/etc/init.d腳本,其中包含該行以非root用戶身份在linux中運(yùn)行mono-service

mono-service my-.net-app.exe service

并且工作良好。還有交互式啟動應(yīng)用程序(用于調(diào)試)選項(xiàng)與

mono my-.net-app.exe interactive

最后一個參數(shù)是告訴它,如果它是作為服務(wù)運(yùn)行的.NET應(yīng)用程序的參數(shù)。這是大致這種方式實(shí)現(xiàn):

private static void Main(string[] args){

if(args.Any() && args[0] != null && args[0] == "service"){

ServiceBase.Run(new[] {(ServiceBase) new MyService()});

}else{

try{

Console.Write("starting app");

if(StartWork()){

Console.Write("press any key to exit");

Console.ReadKey();

}else{

Console.WriteLine("starting app failed");

}

} // end try

finally{

StopWork();

Console.WriteLine("finished app");

}

} // end else

...

} // end Main

public class MyService : ServiceBase{

static private Thread _worker;

protected override void OnStart(string[] args){

_worker = new Thread(() => Program.StartWork(asService: true)); // this asService tells StartWork to not produce console output

_worker.Start();

}

protected override void OnStop(){

Program.StopWork();

_worker.Join(1000);

}

}

這種實(shí)現(xiàn)的目的是允許應(yīng)用程序(即,執(zhí)行StopWork())于Linux機(jī)器上發(fā)送SIGTERM正常死亡。

出于安全原因,我需要能夠以非root用戶身份運(yùn)行該服務(wù)。我創(chuàng)建了一個新用戶,并使其成為應(yīng)用程序?qū)懭肫淙罩疚募哪夸浀乃姓?#xff0c;并將其添加到各個組以允許其訪問所需的設(shè)備文件。然后,根將啟動應(yīng)用程序作為

sudo -u newuser mono-service my-.net-app.exe service

sudo -u newuser mono my-.net-app.exe interactive

mono與第二個選擇的效果很好,但第一個與mono-service不(見下文錯誤消息)。由于它與mono一起使用,我相信用戶newuser具有訪問所有相關(guān)文件和設(shè)備的適當(dāng)權(quán)限。我想知道m(xù)ono-service是否被設(shè)想為僅限于根的應(yīng)用程序。

我也可以住在一起使用mono選項(xiàng),并抑制控制臺輸出,就像這樣:

private static void Main(string[] args){

try{

Console.Write("starting app");

if(StartWork(consoleoutput)){ // true or false depending on whether the service argument was given

Console.Write("press any key to exit");

Console.ReadKey();

}else{

Console.WriteLine("starting app failed");

}

} // end try

finally{

StopWork();

Console.WriteLine("finished app");

}

...

} // end Main

但后來,當(dāng)我殺死服務(wù)(即發(fā)送SIGTERM到mono過程),它停止.net應(yīng)用程序,而不允許它執(zhí)行finally塊。

最后,我的問題是否有人知道為什么mono-service在沒有以root身份啟動時失敗。錯誤消息如下,正如我前面提到的,當(dāng)我使用mono而不是mono-service時,它不存在。

ERROR Program [4] [15:03:06.795 01/12/14] Error in Main!

FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.

---> NHibernate.HibernateException: Could not create the driver from SAFEmine.DataStore.Database.MonoSqliteDriver, SAFEmine.DataStore, Version=1.3.0.6, Culture=neutral, PublicKeyToken=null. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> NHibernate.HibernateException: The IDbCommand and IDbConnection implementation in the assembly Mono.Data.Sqlite could not be found. Ensure that the assembly Mono.Data.Sqlite is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use element in the application configuration file to specify the full name of the assembly.

at NHibernate.Driver.ReflectionBasedDriver..ctor (System.String providerInvariantName, System.String driverAssemblyName, System.String connectionTypeName, System.String commandTypeName) [0x00000] in :0

at NHibernate.Driver.ReflectionBasedDriver..ctor (System.String driverAssemblyName, System.String connectionTypeName, System.String commandTypeName) [0x00000] in :0

at SAFEmine.DataStore.Database.MonoSqliteDriver..ctor() [0x00000] in :0

at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&)

at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00000] in :0

或者,如果我滿足于mono代替mono-service,有沒有辦法從.NET應(yīng)用程序中,并優(yōu)雅地死抓SIGTERM?我試過這個:https://github.com/ServiceStack/ServiceStack/wiki/Run-ServiceStack-as-a-daemon-on-Linux,但是代碼不會在Visual Studio上編譯,說這個using Mono.Unix;和using Mono.Unix.Native行是無效的。我還在Windows上安裝了Mono,并試圖使用Mono編譯器,但它抱怨同樣的事情。

+1

'Mono.Unix'在[Mono.Posix.dll](http://stackoverflow.com/a/8408723/85785)中。 –

2014-12-01 17:15:02

總結(jié)

以上是生活随笔為你收集整理的linux以非root身份运行,以非root用户身份在linux中运行mono-service的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线免费观看网址 | 成人做爰69片免费 | 啪啪资源| a网址| 都市激情亚洲色图 | 亚洲国产小视频 | 国产白丝一区二区三区 | 人人干人人看 | 国产日视频| 毛片一级免费 | 天堂久久爱| 免费视频网站在线观看入口 | 免费成人深夜夜国外 | 超碰caoprom | 国产网站免费在线观看 | 女人色极品影院 | 色婷婷香蕉在线一区二区 | 欧美日韩国产精品一区二区 | 精品人妻无码专区在线 | 欧美色图在线观看 | 成人拍拍拍 | 美女插插视频 | 黄色片免费 | 亚洲大片 | 美女下部无遮挡 | 黄色污污视频软件 | 爆操少妇 | 欧美aaa级| 激情小说在线观看 | 亚洲高清在线免费观看 | 日韩一区二区三区高清 | 日本wwwwww| 91久久精品一区二区三区 | 欧美高清性 | 欧美色综合网 | 亚洲精品一区二区在线 | 人人艹在线观看 | 91久久综合精品国产丝袜蜜芽 | 少妇高潮灌满白浆毛片免费看 | 五月综合激情 | 9久久9毛片又大又硬又粗 | 精品欧美在线 | www插插插| 欧美亚洲一 | 午夜在线观看影院 | 美女福利网站 | 欧美日韩视频一区二区 | 九色婷婷 | 日韩成人免费在线 | 国产一区二区免费看 | 91porny丨首页入口在线 | 免费在线观看毛片视频 | 亚洲成人av中文字幕 | 青娱乐精品视频 | 在线一级| 在线麻豆av | 女性裸体不遮胸图片 | 高跟鞋肉丝交足91 | 免费看黄色一级视频 | 久久久久久久久久综合 | 天堂中文在线播放 | 波多野结衣视频免费在线观看 | 成人网站免费观看入口 | 色窝窝无码一区二区三区成人网站 | 国产精品久久久久久亚洲调教 | 国产尤物av尤物在线看 | 婷婷午夜精品久久久久久性色av | 欧美另类69 | 四虎8848精品成人免费网站 | 人人人妻人人澡人人爽欧美一区 | 色汉综合 | 亚洲无码国产精品 | 色干干| 五月天激情视频 | 日朝毛片| 日本一区二区三区在线观看 | 国产视频一区二区在线观看 | 成人网在线免费观看 | 色多多网站 | av一卡 | 欧美视频一区二区三区四区 | 国产一区二区视频免费 | 99久久久久久久久 | 中文字幕亚洲高清 | 免费国产视频在线观看 | 国产乱子伦农村叉叉叉 | 欧美二区在线 | 亚洲专区av | 国产成人精品一区二区三区视频 | 黄色不卡av | 韩国av免费在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 亚洲精品伊人 | 日韩视频免费观看高清完整版 | 国产av电影一区二区三区 | 欧美11p| 波多野结衣视频在线 | 日韩美女一区 | 爱爱视频一区 |