番禺网站,群晖 wordpress外网,山东省监理建设协会网站,站长工具seo综合查询腾讯runit-docker中管理多个服务 介绍Runit, systemctl和supervisor是三种不同的服务管理工具区别runit优点程序构成快速开始runit实现服务退出执行指定操作runit监管服务打印日志到syslogrunit监管服务后台运行runit监管服务一些错误总结 介绍
runit 是一个轻量级的、稳定的、跨平… runit-docker中管理多个服务 介绍Runit, systemctl和supervisor是三种不同的服务管理工具区别runit优点程序构成快速开始runit实现服务退出执行指定操作runit监管服务打印日志到syslogrunit监管服务后台运行runit监管服务一些错误总结 介绍
runit 是一个轻量级的、稳定的、跨平台的服务管理器。它由 Bruce Guenter 开发目前由 Laurent Bercot 维护。runit 的设计简单明了易于使用和扩展非常适合用于运行服务的守护进程。
runit 提供了一种简单的方式来管理系统服务。与传统的 init 系统不同runit 不使用脚本文件或者其他复杂的配置来管理服务而是直接操作系统的进程表以及通过一个指定的目录来管理服务的运行状态。
runit 将所有服务都视为独立的进程它们可以通过 shell 脚本或者其他语言来启动。当服务启动时runit 将会监视它的运行状态并在服务崩溃或退出时重新启动它。
在 ruanit 中每个服务都由一个单独的目录表示。该目录包含了所有服务所需的信息例如启动脚本、环境变量等。runit 非常灵活可以根据需要添加或删除服务修改配置文件等。
官方文档http://smarden.org/runit/
Runit, systemctl和supervisor是三种不同的服务管理工具区别
Runit: Runit是一种轻量级的、跨平台的服务管理工具用于管理和监控系统服务。它采用简单的文件夹结构和脚本以监视、启动、停止和重启服务。Runit专注于可靠性和高效性并支持服务间的依赖关系。每个服务都由一个独立的runit服务目录表示其中包含run脚本用于启动服务。Runit不依赖于Linux特有的系统功能因此也可以在其他UNIX系统上运行。
Systemd: Systemd是Linux系统中最常见的服务管理工具用于管理守护进程和系统服务。它是现代Linux系统的默认初始化系统具有强大的功能和广泛的支持。Systemd使用单一的配置文件.service文件来定义和管理服务。它可以并行启动多个服务支持服务依赖关系并提供更多高级特性如socket激活、资源限制等。Systemd也可以管理和监控它所启动的进程。
Supervisor: Supervisor是一个进程管理工具主要用于管理守护进程或后台任务。它不同于systemd和runit它不是一个完整的初始化系统而是专注于管理单个进程。Supervisor允许你定义和监控多个进程并提供一种简单的方式来启动、停止、重启进程并在进程意外退出时自动重新启动。
总结
Runit是一个轻量级的、跨平台的服务管理工具适用于管理系统服务和服务间的依赖关系。Systemd是Linux系统的默认初始化系统支持并行启动和管理多个服务提供更多高级特性。Supervisor是一个进程管理工具用于管理守护进程或后台任务而不是一个完整的初始化系统。
选择哪种工具取决于特定的需求和系统环境。
对于Linux系统通常使用默认的systemd对于跨平台需求或简单的服务管理例如容器中多个服务的监管可以考虑使用runit。Supervisor通常用于管理单个后台进程或守护进程。
runit优点 易于配置和使用runit 的配置简单明了使用起来非常容易。它采用纯文本配置文件不需要复杂的脚本或配置语言使得用户可以快速理解和定义服务的启动和监控规则。 快速启动和低资源消耗runit 启动速度非常快因为它仅关注服务的启动和管理没有其他冗余功能。此外runit 的内存和CPU消耗非常低适合在资源受限的环境中运行。 可靠性和稳定性runit 以稳定性著称它经过多年的发展和广泛应用被广泛认可为一个可靠的服务监控工具。它采用简洁的设计和模块化架构有助于降低故障风险。 支持并行启动runit 支持并行启动多个服务这意味着可以在系统启动时同时启动多个服务提高了系统启动速度。 适用于各种系统runit 可以运行在多种操作系统上包括各种Linux发行版、FreeBSD等这使得它成为一个跨平台的选择。 容错和健壮性runit 具有容错机制能够处理服务异常退出和重启并且可以在服务崩溃时采取自动恢复措施。
程序构成
runsvdir每 5 秒扫描一次目录。如果有新的子目录它会自动创建一个 runsv 进程来维护 service。runsv用于管理 service 的 daemon 进程可以通过 sv 命令来操作 service。sv用户操作 service 用的 CLI 工具。svlogd用于收集 service 日志的 daemon 进程。每个 service 都会启动一个 svlogd 进程。
快速开始
服务监控监控程序的二进制文件
conf/runit-sv/php-fpm/run
#!/bin/bash
exec /usr/sbin/php-fpm8.2 --fpm-config /etc/php/8.2/fpm/php-fpm.conf -Rconf/runit-sv/nginx/run
#!/bin/bash
exec /usr/sbin/nginxDockerfile
FROM ubuntu:18.04RUN apt-get install -y runit \ mkdir -p /etc/service/nginx/ /etc/sv/nginx/ /etc/sv/php-fpm/COPY conf/runit-sv/nginx/run /etc/service/nginx/run
RUN chmod 755 /etc/service/nginx/runCOPY conf/runit-sv/php-fpm/run /etc/service/php-fpm/run
RUN chmod 755 /etc/service/php-fpm/runRUN chmod 755 /etc/sv/nginx/run \ chmod 755 /etc/sv/php-fpm/run \ ln -s /etc/sv/charon /etc/service/ \ ln -s /etc/sv/php-fpm/ /etc/service/ \ ln -s /etc/sv/nginx/ /etc/service/# 启动GAD
CMD [/bin/docker-entrypoint.sh]
/bin/docker-entrypoint.sh
exec runsvdir /etc/service runit实现服务退出执行指定操作
runit使用 trap 命令来捕获 TERM 和 INT 信号当使用 runit 自身会接收到 TERM 信号时停止服务有时会不生效可以使用自定义捕获 TERM 和 INT 信号
#!/bin/bashstop_task() {killall nginxexit 0}trap stop_task TERM INT/bin/sh -c trap stop_task TERM INT; /usr/sbin/nginx 21 | /usr/bin/logger -n 127.0.0.1 -P 514 -t NGINX -d --rfc5424 wait $!runit监管服务打印日志到syslog
#!/bin/bash
exec /usr/sbin/nginx | /usr/bin/logger -n 127.0.0.1 -P 514 -t NGINX -d --rfc5424 21
runit监管服务后台运行
在runit中run脚本是一个阻塞式的命令直到服务退出才会退出脚本。如果您、需要在服务启动后执行其他任务可以尝试以下几种方法在run脚本中使用后台进程来启动服务
方式一在run脚本中使用符号来将服务启动命令放到后台进程中执行。
例如 #!/bin/sh# Start the service in the background
/usr/bin/my-service
这样启动的服务会在后台运行而不会阻塞脚本这样您就可以在脚本中执行其他任务了。
方式二在run脚本中使用nohup命令 nohup命令可以将命令放到后台进程中执行并将输出重定向到指定文件中。例如
#!/bin/sh# Start the service in the background with nohup
nohup /usr/bin/my-service /var/log/my-service.log 21 # Other tasks to execute after the service starts
echo My service has started.
方式三在run脚本中使用wait命令
wait命令可以等待指定的进程结束并在进程结束后继续执行脚本中的其他命令。例如
#!/bin/sh# Start the service and wait for it to finish
/usr/bin/my-service
wait $!# Other tasks to execute after the service finishes
echo My service has finished.
在这个例子中wait命令会等待my-service进程结束并返回my-service的退出状态码。在my-service进程结束后脚本会继续执行其他命令。
runit监管服务一些错误总结
注意通过apt-get安装的 文件需要手动关闭他的daemon不然会通过sysinit进行托管在
daemonphp-fpm 进程默认是以 daemon 方式启动的使用 runit 监护进程时被监护的进程不能是守护进程。 我们需要关闭 php-fpm 的进程守护编辑 /usr/local/php/etc/php-fpm.conf查找 daemonize 修改为 no。
继续锁定 ERROR先查看 php-fpm 日志
[01-Sep-2018 11:20:21] ERROR: unable to bind listening socket for address 127.0.0.1:9000: Address already in use (98)
[01-Sep-2018 11:20:21] ERROR: FPM initialization failed
[01-Sep-2018 11:20:23] ERROR: unable to bind listening socket for address 127.0.0.1:9000: Address already in use (98)
[01-Sep-2018 11:20:23] ERROR: FPM initialization failed
[01-Sep-2018 11:20:24] ERROR: unable to bind listening socket for address 127.0.0.1:9000: Address already in use (98)
[01-Sep-2018 11:20:24] ERROR: FPM initialization failed
[01-Sep-2018 11:20:25] ERROR: unable to bind listening socket for address 127.0.0.1:9000: Address already in use (98)
[01-Sep-2018 11:20:25] ERROR: FPM initialization failed所以在runit监管服务时如果有类似在通过apt-get安装以后默认使用susinit监管程序需要把服务的默认启动方式关了将其二进制通过runit进行监管