用于在用户(非根)级别运行/管理/监视/自动重新启动守护程序和服务的服务管理器
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>
如果找到匹配项,它将用匹配的程序更新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即可应用配置更改。