用于在用户(非根)级别运行/管理/监视/自动重新启动守护程序和服务的服务管理器

usrsvc的Python项目详细描述


USRSVC

用于在用户(非根用户)级别运行/管理/监视/自动重新启动守护程序和服务的服务管理器

用于管理作为服务帐户用户运行的服务/守护程序。

设计

usrsvc分为两部分, usrsvc (启动/停止/重新启动/获取服务状态的工具)和 usrsvcd (保持服务运行、监视服务运行等的守护进程)。

您可以单独使用 usrsvc ,也可以与 usrsvcd 结合使用。

没有父级/子级

与其他服务管理器(如supervisord)相反,usrsvcd不要求自己是它所管理的进程的父进程。这允许重新启动、更新或根本不运行usrsvcd,而不影响它管理的服务。

在supervisord世界中,如果需要更新正在运行的supervisord,还必须重新启动它正在管理的所有进程,这将导致不必要的中断。

usrsvc usrsvcd 启动的所有服务都将"init"作为父级(或在某些系统配置下为systemd)。

捕获/管理现有流程

由于不需要甚至不使用父子关系,usrsvc能够管理已经运行的进程。usrsvc有几种可配置的方法来识别和匹配您定义的服务和正在运行的进程。

模块化/弹性

usrsvc不是一个单一的守护进程,而是分为 usrsvc (用于启动/停止/重新启动/状态的工具)、守护进程 usrsvcd (用于管理自动启动、自动重新启动、监视的工具)和将来用于web界面的xlmrpc守护进程。

每一个工具都能做它所需要做的事情,并能从任何故障情况中恢复并继续运行。

例如,您可以运行"usrsvcd reread"(或向usrsvcd进程发送usr1信号),让它尝试重新读取配置。如果新配置出现错误,将记录该配置,并保留旧配置。 如果新配置通过验证,这些更改将应用于usrsvcd执行的下一组操作。与其他服务管理器不同, usrsvcd 不会因配置错误而崩溃。

有几个命令/日志项提供json输出,以便外部应用程序可以对其进行分析和使用。

过程监控

usrsvcd 提供了监视它管理的进程的能力,而不仅仅是监视它是否停止/启动。它们是可配置的、可选的,并且是按服务定义的(请参见下面的"监控"部分)。

无根/隔离

usrsvc是按照安全隔离的最佳实践在服务帐户级别运行的。它不需要根配置或服务就可以运行;所有内容都与运行服务的用户帐户隔离(如"web"或"django")

每个帐户都有自己的独立配置,并运行自己的usrsvcd实例,从而在应用程序组之间提供进一步的隔离。

简单配置

所有配置都是通过简单的ini样式配置文件进行的,并支持定义和继承默认设置,以防止程序之间的重复。

详细

usrsvc和usrsvcd对日志记录非常详细,并尽可能具体。所有日志都包含时间戳和有意义的错误代码/描述,以简化甚至使对服务问题的评估成为可能。

电子邮件提醒

当在程序或程序组上设置"电子邮件警报"属性时,当监视触发重新启动,或发现程序未运行且由usrsvcd启动时,将发送电子邮件。

过程标识

主要方法用于管理进程的是通过pidfiles。每个程序都需要在其配置中定义一个pidfile。

当autopid=true(默认值)时,usrsvc将管理pidfile。如果将autopid设置为false,则应用程序将需要生成自己的pidfile(不推荐)。

由PID文件标识的进程将对照 proctTitle\u re 进行检查,如果它们不匹配,PID文件将被视为过时并被删除。

启动过程

当usrsvc启动一个进程时,它将运行 成功秒 ,在这段时间内它将尝试匹配一个进程(基于 proctTitle\u re ),并确保该进程在该周期结束时仍在运行。

当useshell=true时,usrsvc将派生并执行一个bash进程(以 命令的形式提供),该进程将启动您的进程;当useshell=false时,它将直接启动给定的 命令。

该进程、其子进程及其所有子进程等都将对照proctTitle re 检查是否匹配。

如果您的过程需要很长时间才能开始,则可能需要将成功秒数从默认值增加到

当进程匹配且周期结束时,usrsvc将写入pidfile(autopid=true)并返回success,否则将返回failure。

扫描进程 < DL>

scan_for_process 为true(默认值)、缺少PID文件或当PID文件被声明为过时(与 procTitle_re 不匹配)时,
usrsvc将扫描以当前用户身份运行的所有进程,查找与proctTitle匹配的进程。

如果找到匹配项,它将用匹配的程序更新pidfile。

如果可能的话,您应该确保您的应用程序具有唯一的procTitle,这样您就可以安全地让 scan\u for\u process =true。

如果服务是通过其他方式启动的,或者PID文件已被删除或以其他方式损坏,这将提供一个回退。

除了作为回退工作外,这允许您将usrsvc附加到任何正在运行的服务, 而无需重新启动该服务。 您可以随意将usrsvc连接和分离到任何进程。

通过扫描找到一个进程后,它的pid将被写入pidfile,这是将进程与名称关联的主要(也是最有效的)方法。

许多服务都可以通过setproctTitle系统调用、python库"setproctTitle"等将proctTitle设置为独特的内容。

建议尽可能使scan_for_process 为true,以增加额外的弹性和可管理性。

USRSVC(工具)

"usrsvc"工具处理服务的启动/停止/重新启动/状态的基本操作。您可以在运行或不运行usrsvcd时使用它来管理服务。

< Buff行情>

用法:usrsvc(选项)[开始/停止/重新启动/状态][程序名]

< Buff行情>

对给定的程序名执行请求的操作。

可以使用"all"代替"program name"在所有配置的程序上执行给定任务。(参见下面的平行图)

usrsvc是对服务执行特定操作的工具,usrsvcd是用于自动重新启动/监视等的相关后台程序。

选项:

--–

< Buff行情>

平行:

< Buff行情>

执行"开始/停止/全部重新启动"时,可以添加"–parallel"或"-p"来执行

同时对所有项目执行的操作。

配置:

---

< Buff行情> usrsvc使用$home/usrsvc.cfg(/home/media/usrsvc.cfg)中的配置文件。

文档

----

< Buff行情>

运行"usrsvc–readme"或查看https://github.com/kata198/usrsvc/blob/master/readme.md" rel="nofollow">https://github.com/kata198/usrsvc/blob/master/readmeMD

< Buff行情> 更多文档。

该工具将输出关于发生了什么的一些基本信息,并给出一个有意义的返回代码(0=成功,否则请参见https://raw.githubusercontent.com/kata198/usrsvc/master/usrsvcmod/constants.py" rel="nofollow">https://raw.githubusercontent.com/kata198/usrsvc/master/usrsvcmod/constants.py"return codes"对象,用于返回所用代码和说明的列表。

usrsvc将尽可能详细地确定程序无法启动和保持运行的原因,以便于调试。

示例用法

开始时间:

< Buff行情>

[myuser]$usrsvc启动magiclooper

[2016年3月8日星期二22:14:34]-启动magiclooper:

{'args':['/home/svcact/bin/magiclooper.py'],'cmdline':'/usr/bin/python/home/svcact/bin/magiclooper.py','pid':12467,'executable':'/usr/bin/python','running':true}

状态:

< Buff行情>

[myuser]$usrsvc状态magiclooper

[2016年3月8日星期二22:14:55]-Magiclooper正在运行:

{'args':['/home/svcact/bin/magiclooper.py'],'cmdline':'/usr/bin/python/home/svcact/bin/magiclooper.py','pid':12467,'executable':'/usr/bin/python','running':true}

<>:

< Buff行情>

[myuser]$usrsvc停止magiclooper

【2016年3月8日星期二22:15:37】——停止Magiclooper【12467】

[2016年3月8日星期二22:15:37]-Magiclooper终止

usrsvcd(守护进程)

usrsvcd守护进程处理配置服务的自动启动、自动重新启动和监视。它是可选的,但对于高级功能是必需的。

< Buff行情>

用法:usrsvcd(可选:[操作])

usrsvcd是usrsvc的守护进程部分,它主动监视进程,

< Buff行情> 提供自动启动、自动重新启动和其他高级功能。

如果省略"action",则默认为"start"。

< Buff行情>

操作:

< Buff行情>

checkconfig-尝试分析配置文件并验证正确性,而不影响正在运行的usrsvcd实例。失败时返回非零。

重新读取-将sigusr1发送到正在运行的usrsvcd进程,这将导致它重新读取configs并立即将更改应用于正在运行的实例。

< Buff行情> 如果配置中有错误,USRSVCD进程将记录一条消息,并保留其当前配置状态。

重新启动-干净地重新启动usrsvcd守护进程

状态-检查usrsvcd是否正在运行。失败时返回非零

stop-停止运行usrsvcd实例

使用$home/usrsvc.cfg中的主配置文件

当启动时, usrsvcd 进程将获取任何已配置服务的状态(无论它们是否正在运行,它们的pid是什么,等等)。与其他管理者不同,它不需要重新启动程序即可开始管理。

更新配置

使用usrsvcd,您可以添加或删除服务,或更改现有服务的属性,而不会中断任何应用程序。

只需对配置进行更改,然后运行 usrsvcd checkconfig 以针对任何配置错误进行验证。如果有错误,系统将提醒您这些错误是什么,并且 usrsvcd 将继续在上次良好配置下运行。

当您满意并验证您的更改后,运行 usrsvcd reread 告诉usrsvcd更新您的配置的内部副本。usrsvcd将在加载新配置之前执行检查,如果有错误(并保留上一个良好的配置)将向您发出警告。

在您的更改经过验证后,usrsvcd将在当前更改完成后应用更新操作集。这使得在任何时候更新都是安全的,无需担心应用程序中断。

无需重新启动usrsvcd即可应用配置更改。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java LineNumberReader。如果查询行为不正确,则返回readLine()   java包含了一个使用AndroidX的工具栏,这让我的应用程序崩溃了   JVM设置通过“java jar”运行应用程序的最佳实践   java如何获取ImageButton宽度   java Oracle SQLLDR实用程序无响应   列出Java获取对象的arrayList中最常见的元素   java使用带有FlowLayout的getContentpane对布局应用更改,但不起作用为什么?   在java中,我可以在画布上绘制画布吗?   编译游戏代码时发生java异常错误   从firestore获取java Webview失败   java将TableLayout中单元格的内容向右对齐   java无法在发布模式下启动活动(使用proguard安卓optimize配置)   java允许在线程期间进行GUI更新。睡觉   java如何对以变量为列表的列表进行排序   API URL上的java Google云端点异常