Linux系统下使用代码创建并使系统服务程序读取主目录下的配置文件

本文主要是介绍Linux系统下使用代码创建并使系统服务程序读取主目录下的配置文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景:

在Linux下,将JSON数据保存到一个静态文件中,而这个文件位于多级目录下,并且该目录可能并不存在,不存在得情况下需要创建多级目录,并生成该静态文件。而在Linux下创建目录是需要权限的,因此,目录应该选择在主目录下,只有主目录下是不需要权限的,而多数软件也是如此操作的。


环境:

Linux

.Net8


方案

比如,此文件目录为

/主目录/.zhaoming6/zhaoming-gateway/serial.json

但是,当前我们并不知道主目录是什么,因为不同的系统,主目录都不一样。 

获取主目录: 

var home = Environment.GetEnvironmentVariable("HOME");

 而“home”就是主目录,

/home/zg      

 文件目录为

var path = $"{home}/.zhaoming6/zhaoming-gateway/serial.json";

创建文件:

    private async void GenerateTheConfigFile(string path){using var process = new Process();process.StartInfo = new ProcessStartInfo{FileName = "/bin/bash",Arguments = $"-c \"touch {path}\"",UseShellExecute = false,RedirectStandardOutput = true,CreateNoWindow = true};process.Start();var output = await process.StandardOutput.ReadToEndAsync();await process.WaitForExitAsync();}

 而读取文件时,可能程序不同,使用的权限不同,那么得到的主目录是不一样的,使用主用户得到的主目录应该是例如“/home/zg”,而系统服务程序使用root权限得到的是“/home/root”,因此:

private static string GetConfigFilePath(){try{using var process = new Process();process.StartInfo = new ProcessStartInfo{FileName = "/bin/bash",Arguments = $"-c \" id -nu 1000\"",UseShellExecute = false,RedirectStandardOutput = true,CreateNoWindow = true};process.Start();var user = process.StandardOutput.ReadToEnd();process.WaitForExit();if (user.Contains('\n')){user = user[..^1];}var home = Environment.GetEnvironmentVariable("HOME");var first = home.Split("/")[1];return $"/{first}/{user}/.zhaoming6/zhaoming6-fas-gateway/serialport.json";}catch{return "";}}

加载配置文件:

 var config = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json").AddJsonFile(GetConfigFilePath(), true).Build();

后面的配置文件会覆盖前面的相同的配置数据,而参数“true”表示此配置文件可选,在文件不存在或没有找到的情况下,不加载此文件。

这篇关于Linux系统下使用代码创建并使系统服务程序读取主目录下的配置文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097199

相关文章

Linux中查看操作系统及其版本信息的多种方法

《Linux中查看操作系统及其版本信息的多种方法》在服务器运维或者部署系统中,经常需要确认服务器的系统版本、cpu信息等,在Linux系统中,有多种方法可以查看操作系统及其版本信息,以下是一些常用的方... 目录1. lsb_pythonrelease 命令2. /etc/os-release 文件3. h

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的