操作系统应用服务管理系统及其应用服务管理方法转让专利

申请号 : CN202210780837.7

文献号 : CN114860326B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 唐峰徐斌韩雪

申请人 : 麒麟软件有限公司

摘要 :

本发明涉及操作系统应用服务管理系统及方法,所述系统其运行于系统服务和应用服务之间,供用户查询并管理应用服务;包括应用服务加载模块、应用服务监听模块、命令行交互模块及Web管理功能模块,其中,应用服务加载模块用于读取应用服务的配置文件并启动应用服务;应用服务监听模块用于记录、监听应用服务的运行状态和对应日志;命令行交互模块用于接收用户对应用服务的命令并完成交互;Web管理功能模块用于提供用户远程控制和管理应用服务的接口。本发明隔离了系统服务和应用服务,使用户不必了解操作系统核心服务即可配置自己的应用服务,同时,在查看应用服务状态的时候,并不会看到系统核心服务,提高了系统的用户友好性。

权利要求 :

1.一种操作系统应用服务管理系统,其特征在于:所述应用服务管理系统通过apt命令安装运行于系统服务和应用服务之间,供用户查询并管理应用服务;

所述应用服务管理系统包括应用服务加载模块、应用服务监听模块、命令行交互模块及Web管理功能模块,其中,应用服务加载模块用于读取应用服务的配置文件并启动应用服务;应用服务的配置文件为yaml文件;

应用服务监听模块与应用服务加载模块连接,用于监听应用服务的运行状态,并记录应用服务的对应日志;

命令行交互模块用于接收用户对应用服务的命令并完成交互;

Web管理功能模块与应用服务、应用服务加载模块、应用服务监听模块及命令行交互模块连接,用于提供用户远程控制和管理应用服务的接口。

2.如权利要求1所述的操作系统应用服务管理系统,其特征在于:所述命令行交互模块通过如下命令行实现对相应的应用服务的管理:通过“usd status+对应的应用服务”命令行,得到对应的应用服务的状态;

通过“usd start+对应的应用服务”命令行,启动对应的应用服务;

通过“usd stop+对应的应用服务”命令行,关闭对应的应用服务;

通过“usd reload+对应的应用服务”命令行,重新加载对应的应用服务的配置文件;

通过“usd restart+对应的应用服务”命令行,重启对应的应用服务。

3.如权利要求1所述的操作系统应用服务管理系统,其特征在于:所述应用服务加载模块通过读取 /etc/userspaced/userspace.d/ 目录下所有文件的内容,一一解析到数据结构中,并通过fork/exec的方式启动应用服务;

所述应用服务监听模块通过记录启动应用服务进程的pid,轮询查询监听proc/pid下应用服务的进程状态,从而确定应用服务运行是否正常;

在应用服务运行不正常的情况下,通过读取应用服务加载模块所读取的配置文件决定是否重启。

4.如权利要求1所述的操作系统应用服务管理系统,其特征在于:所述应用服务监听模块通过stdout及stderr输出重定向到日志文件中,实现对应用服务对应日志的记录。

5.基于权利要求1‑4中任一项所述的操作系统应用服务管理系统的应用服务管理方法,其特征在于,包括如下步骤:步骤S1:编写基于usd的应用服务的配置文件;

步骤S2:使用usd reload命令行重新加载应用服务的配置文件;

步骤S3:以fork/exec方式启动应用服务;记录其pid信息以及相应的结构体数据,并通过查询监听proc/pid下的进程状态监听应用服务的运行状态;

步骤S4:通过stdout和stderr输出重定向到日志文件中,以记录应用服务的对应日志;

步骤S5:应用服务出现异常时,通过应用服务配置文件的信息,判断是否对应用服务进行重启或退出操作,并将应用服务运行异常的相关信息通知给用户。

6.如权利要求5所述的应用服务管理方法,其特征在于,所述步骤S1中,通过键值对‑yaml文件的方式编写应用服务的配置文件。

7.如权利要求5所述的应用服务管理方法,其特征在于,所述步骤S2中,应用服务的配置文件加载于/etc/userspaced/userspace.d/ 目录下。

8.如权利要求5所述的应用服务管理方法,其特征在于,所述步骤S3中,应用服务通过子进程、直接运行、单次运行或空闲时运行中的任一种方式进行启动。

说明书 :

操作系统应用服务管理系统及其应用服务管理方法

技术领域

[0001] 本发明涉及操作系统应用服务管理技术领域,具体涉及操作系统应用服务管理系统及其应用服务管理方法。

背景技术

[0002] 在现有存在的各种linux操作系统上,关于服务的启动方式,有SysVinit和systemd。它们都是由linux内核启动的第一个程序开始接管系统。
[0003] SysVinit 通过开机启动读取 /etc/inittab来确定启动等级,进而启动/etc/rc.d/rc 和/etc/rc.d/rcX.d(0‑6) 目录下的脚本文件,来逐个运行系统的服务进程。
[0004] Systemd通过开机启动systemd的守护进程,然后/etc/systemd/system /etc/systemd/user 和 /lib/systemd/system/  /lib/systemd/user/ 来逐个启动系统服务。
[0005] 在SysVinit和systemd中启动的各种服务,都是操作系统的核心服务,而这些核心服务,其实对于用户来说,没有必要去了解和配置它,他虽然是操作系统的一部分,但不应该让所有使用操作系统的人都去了解它
[0006] 如果用户安装了一个应用程序,在现有的系统中,应用程序会在SysVinit/systemd的框架下安装服务。如果哪天这个应用程序崩溃了,用户只能在SysVinit/systemd框架在进行查找和修复,这样会使得用户被迫的看到许多自己不认识的系统核心服务。
[0007] 现有的服务管理存在如下缺陷:
[0008] 1、现有的服务管理是基于系统本身的,如果用户在查询自己的应用服务状态时(systemctl status),很容易看到一堆不认识的服务,这样对用户来说并不友好。
[0009] 2、当应用程序需要一个程序的多个版本运行时,传统服务例如systemd并没有办法做到,除非改写服务service文件。
[0010] 3、现有的服务管理例如systemd没有良好的远程观测和管理服务的方式(web方式),故无法提供在多网络拓扑下的模块化服务的查询和部署。

发明内容

[0011] 为解决已有技术存在的不同,本发明提供了一种操作系统应用服务管理系统,所述应用服务管理系统运行于系统服务和应用服务之间,供用户查询并管理应用服务;
[0012] 所述应用服务管理系统包括应用服务加载模块、应用服务监听模块、命令行交互模块及Web管理功能模块,其中,
[0013] 应用服务加载模块用于读取应用服务的配置文件并启动应用服务;
[0014] 应用服务监听模块与应用服务加载模块及命令行交互模块连接,用于监听应用服务的运行状态,并记录应用服务的对应日志;
[0015] 命令行交互模块用于接收用户对应用服务的命令并完成交互; Web管理功能模块与应用服务、应用服务加载模块、应用服务监听模块及命令行交互模块连接,用于提供用户远程控制和管理应用服务的接口。
[0016] 其中,所述命令行交互模块通过如下命令行实现对相应的应用服务的管理:
[0017] 通过“usd status+对应的应用服务”命令行,得到对应的应用服务的状态;
[0018] 通过“usd start+对应的应用服务”命令行,启动对应的应用服务;
[0019] 通过“usd stop+对应的应用服务”命令行,关闭对应的应用服务;
[0020] 通过“usd reload+对应的应用服务”命令行,重新加载对应的应用服务的配置文件;
[0021] 通过“usd restart+对应的应用服务”命令行,重启对应的应用服务。
[0022] 其中,所述应用服务加载模块通过读取 /etc/userspaced/userspace.d/ 目录下所有文件的内容,一一解析到数据结构中,并通过fork/exec的方式启动应用服务;
[0023] 所述应用服务监听模块通过记录启动应用服务进程的pid,轮询查询监听proc/pid下应用服务的进程状态,从而确定应用服务运行是否正常;
[0024] 在应用服务运行不正常的情况下,通过读取应用服务加载模块所读取的配置文件决定是否重启。
[0025] 其中,所述应用服务监听模块通过stdout及stderr输出重定向到日志文件中,实现对应用服务对应日志的记录。
[0026] 其中,所述操作系统应用服务管理系统通过apt命令安装运行于系统服务和应用服务之间。
[0027] 本发明另外提供了一种基于上述任一项所述的操作系统应用服务管理系统的应用服务管理方法,包括如下步骤:
[0028] 步骤S1:编写基于usd的应用服务的配置文件;
[0029] 步骤S2:使用usd reload命令行重新加载应用服务的配置文件;
[0030] 步骤S3:以fork/exec方式启动应用服务;记录其pid信息以及相应的结构体数据,并通过查询监听proc/pid下的进程状态监听应用服务的运行状态;
[0031] 步骤S4:通过stdout和stderr输出重定向到日志文件中,以记录应用服务的对应日志;
[0032] 步骤S5:应用服务出现异常时,通过应用服务配置文件的信息,判断是否对应用服务进行重启或退出操作,并将应用服务运行异常的相关信息通知给用户。
[0033] 其中,所述步骤S1中,通过键值对‑yaml文件的方式编写应用服务的配置文件。
[0034] 其中,所述步骤S2中,应用服务的配置文件加载于/etc/userspaced/userspace.d/ 目录下。
[0035] 其中,所述步骤S3中,应用服务通过子进程、直接运行、单次运行或空闲时运行中的任一种方式进行启动。
[0036] 本发明提供的操作系统应用服务管理系统及方法,隔离了系统服务和应用服务,使用户不必了解操作系统核心服务即可配置自己的应用服务,同时,在查看应用服务状态的时候,并不会看到系统核心服务,提高了系统的用户友好性。

附图说明

[0037] 图1:已有的SysVinit的启动流程。
[0038] 图2:已有的systemd的启动流程。
[0039] 图3:本发明提供的应用服务管理系统的逻辑框架图。
[0040] 图4:本发明提供的应用服务管理系统的另一详细的逻辑框架图。
[0041] 图5:Web管理功能模块所能够实现的交互功能。
[0042] 图6:命令行交互模块的功能逻辑图。
[0043] 图7:应用服务监听模块与应用服务加载模块的功能逻辑图。
[0044] 图8:本发明的应用服务管理系统的安装启动程序示意图。
[0045] 图9:应用服务监听模块实现日志记录功能的逻辑图。

具体实施方式

[0046] 为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
[0047] 针对已有技术存在的不同,为了满足操作系统对用户的友好性,本发明开发了一种操作系统的应用服务管理办法,它基于systemd,同时它将接管所有的应用服务。当用户在进行应用程序的管理的时候,没有必要也无需关系操作系统的核心服务。
[0048] 图3为本发明提供的应用服务管理系统的逻辑框架图,本发明通过在systemd/SysVinit上运行一个提供用户使用的服务,应用管理服务是存在与系统本身的一套服务,如果是systemd,那么会自身建立一个userspace服务,如果是SysVinit,那么会自身建立一个userspaced服务,在本发明的应用管理服务之下,通过对应的管理命令,客户查询到的应用程序和服务,都是排除了系统核心服务的,从而可以极大的提高用户友好性。
[0049] 图4为本发明提供的应用服务管理系统的另一详细的逻辑框架图,如图4所示,所述应用服务管理系统运行于系统服务和应用服务之间,供用户查询并管理应用服务;应用服务管理系统包括应用服务加载模块、应用服务监听模块、命令行交互模块及Web管理功能模块。
[0050] 各模块的所能实现的功能或者工作方式,分别结合图4及图5‑图7详述。
[0051] 1、Web管理功能模块
[0052] Web管理功能模块作为实现应用服务加载模块、应用服务监听模块、命令行交互模块与应用服务之间交互的基础接口,与应用服务加载模块、应用服务监听模块、命令行交互模块均连接,用于远程连接及配置系统服务,提供用户远程控制和管理应用服务的接口。
[0053] 图5为Web管理功能模块所能够实现的交互功能,主要包括查询日志、查询状态、查询所有服务,停止和重启服务等几项基本功能,其具体的实现方法可基于已有技术完成,本发明在此不做赘述。
[0054] 2、命令行交互模块
[0055] 图6为命令行交互模块的功能逻辑图,命令行交互模块提供Shell功能,用于命令行对应用服务的交互;具体的,shell功能利用如下命令行对相应的应用服务实现管理:
[0056] 通过“usd status+对应的应用服务”命令行,得到对应的应用服务的状态;
[0057] 通过“usd start+对应的应用服务”命令行,启动对应的应用服务;
[0058] 通过“usd stop+对应的应用服务”命令行,关闭对应的应用服务;
[0059] 通过“usd reload+对应的应用服务”命令行,重新加载对应的应用服务的配置文件;
[0060] 通过“usd restart+对应的应用服务”命令行,重启对应的应用服务。
[0061] 3、应用服务监听模块与应用服务加载模块
[0062] 图7为应用服务监听模块与应用服务加载模块的功能逻辑图,加载服务主要是通过读取 /etc/userspaced/userspace.d/ 目录下所有文件的内容,一一解析到数据结构中,并通过fork/exec的方式启动应用服务,具体可以通过子进程/直接运行/单次运行/空闲时运行四种方式进行启动。然后记录启动进程的pid(即进程号process id),轮询的查询监听proc/pid(进程号所在的目录)下的fork/exec进程的运行状态,并通过stdout和stderr输出重定向到日志文件中,记录应用服务的对应日志,从而确定应用程序运行是否正常。
[0063] 应用服务/etc/userspaced/userspace.d/ 目录下涉及有应用服务的配置文件,配置文件中配置有应用程序运行异常时的应对措施,如重启、通知或退出,当监听出应用程序运行异常时,通过读取配置文件中的配置信息,确定是否对应用服务进行重启或退出操作,并将应用服务运行异常的信息通过Web管理功能模块通知给用户。
[0064] 应用服务监听模块在监听到应用服务出现运行异常后,所进行的重启、通知或退出操作,由应用服务管理系统内的代码自动触发;与命令行交互模块所完成的重启、关闭等操作不同,命令行交互模块实现的重启及关闭等操作由用户手动触发,其目的在于便于维护者管理或调试自己的应用服务。
[0065] 本发明提供的上述应用服务管理系统,实现方法或者使用方法如下:
[0066] 1、首先,请结合图8所示,为本发明的应用服务管理系统的安装启动程序示意图:通过apt命令安装应用服务管理系统。
[0067] 2、之后,启动userspaced守护进程。
[0068] 3、编写基于usd的应用服务配置文件。
[0069] 由于已有的应用程序只需要启动一个实例就行了,其他实例可以通过子进程的方式完成。如果需要运行多个版本下的数据库,在原始Linux系统下,需要额外用到交替安装器,否则默认只能安装一个版本。而本发明的应用服务管理系统是通过apt install安装的软件,为了能够完美支持(同时启动多个版本)和归类(统一管理所有的服务)这种情况,本发明的配置文件通过键值对(yaml文件)的方式体现。
[0070] 一个实例如下
[0071] test: #指明用户服务的名字,后续通过 usd status test 可查看其状态[0072] dir: #指明真正的可执行文件存在的目录地址
[0073] ‑ /usr/bin/
[0074] name: #指明真正的可执行文件名字
[0075] ‑ program
[0076] cmd: #指明可执行文件的参数
[0077] ‑ ‑‑help
[0078] log: #指明该用户程序的标准输出和标准错误重定向的日志文件[0079] ‑ /tmp/program.log
[0080] user: #指明以kylin用户运行程序
[0081] ‑ kylin
[0082] env: #指明运行程序额外带的环境变量
[0083] ‑ PATH=$PATH
[0084] type: #指明该用户服务运行的方式
[0085] ‑ fork/exec/oneshot/idle
[0086] autorestart: #指明当服务退出时是否重启服务
[0087] ‑ on/off
[0088] 由此可知,在本发明中,当应用程序需要一个程序的多个版本运行时,传统服务例如systemd并没有办法做到,除非改写service文件,然而,本发明通过yaml文件可支持多组配置,从而导致一个yaml能够启动多个实例。
[0089] 本发明配置的yaml格式文件,通过如下过程对其进行读取并解析:通过函数 load_file 加载指定位置的yaml文件,然后通过函数get_struct 将yaml数据读取到结构体中,再然后通过函数 close_file 关闭打开的yaml文件,再启动一个线程 如果检测到yaml出现改动,通过reload_file 函数来重新加载yaml内的数据。
[0090] 4、将上述编写的配置文件存放在/etc/userspaced/userspace.d/目录下,然后通过usd reload命令,可以重新加载此服务。
[0091] 5、应用服务启动,记录其pid信息以及相应结构体数据,将应用服务添加到循环队列中,通过轮询查询监听proc/pid下的进程状态,不断轮询应用服务的状态,流程上文图7已示。
[0092] 6、对于每个启动的应用服务,同时通过stdout及stderr输出重定向到日志文件中,如图9所示,方便查阅问题。
[0093] 7、在应用服务运行出现异常时,通过的读取配置文件判断是否重启、是否退出,并将应用服务运行异常的相关信息通知给用户。
[0094] 本发明的有益效果如下:
[0095] 1、隔离了系统服务和应用服务,使用户不必了解操作系统核心服务即可配置自己的应用服务,同时,在查看应用服务状态的时候,并不会看到系统核心服务,提高了系统的用户友好性;
[0096] 2、通过web的方式提供了应用服务的查询和管理接口,使用户可以通过web网页远程监听、查询和管理所有的应用服务,此为systemd系统所无法实现的;
[0097] 3、通过键值对(yaml文件)的方式对应用服务进行配置、新增、修改及删除,相比于编写systemd的service文件,配置更简单,更便于服务部署;
[0098] 4、对于启动应用服务,都会存在单独的日志文件,相比于systemd‑journald的日志,查看日志信息更方便;
[0099] 5、对于所有的用户服务,能够通过Web管理功能模块实现一键关闭、启动、或重启所有服务。而这个功能systemd不具备。
[0100] 本发明中,所谓的“/sbin/init”,是操作系统内核启动后加载的第一个程序,目录在sbin下,名字叫init。
[0101] 本发明中,所谓的“SysVinit”,是早期的操作系统使用的服务管理框架。
[0102] 本发明中,所谓的“Systemd”,是新的操作系统使用的服务管理框架,比sysvinit功能更强大。
[0103] 本发明中,所谓的“Web网页”,指的是启动的一个本地http网页,它占用一个端口,可以通过浏览器访问这个http网页。
[0104] 本发明中,所谓的“守护进程”是指一直运行在系统后台的应用程序。
[0105] 本发明中,所谓的“Shell功能”,指的是操作系统预置的用于字符交互的应用程序,这里shell功能指的是程序提供了通过命令行进行字符交互的功能。
[0106] 本发明中,所谓的“Yaml文件”,是指一种文件格式。
[0107] 本发明中,所谓的“Fork”,是指创建一个新的进程,新的进程为子进程。
[0108] 本发明中,所谓的“Exec”指的是直接运行,在创建的子进程环境里直接运行某个具体可执行二进制。
[0109] 虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。