资讯专栏INFORMATION COLUMN

[译] runit 快速入门

Karrdy / 3226人阅读

摘要:译自概要通过这篇教程,我们可以快速了解并搭建起相应服务。监控运行的服务,当服务发生意外中断的时候,自动重启服务。的设计思想就是每个组件的功能是完全独立的,以便管理。创建作为暂存目录。由于脚本默认被用户执行,通过可以将配置为普通用户来执行。

译自:runit quick start

概要

通过这篇教程,我们可以快速了解runit并搭建起相应服务。

runit是一个用于服务监控的UNIX软件,它提供以下两种服务:

当服务器启动的时候启动定义好的服务。

监控运行的服务,当服务发生意外中断的时候,自动重启服务。

这篇教程将通过一个简单的示例来讲解如何创建新的runit服务。如果你想了解更多信息,可以查看runit的官方文档。

本篇教程包括以下三部分:

创建一个runit模板

创建第一个服务

如何自动管理服务

搭建环境

首先确保系统安装了runit,大多数Linux版本的软件仓库里都包哈了runit包。例如,如果你的系统是基于Debian的,则可以使用下面的命令进行安装:

# apt-get install runit

如果是centos,则可以使用yum进行安装,但是默认情况下centos软件仓库里并没有runit,所以需要先配置相应的仓库:

# curl -s https://packagecloud.io/install/repositories/imeyer/runit/script.rpm.sh | sudo bash
# sudo yum install runit-2.1.1-7.el7.centos.x86_64

运行以下命令来检查是否已经安装了runit并且系统已经运行了runit。

# ps -ef | grep runsvdir 

输出结果如下:

root  2783   1  0 15:34 ? 00:00:00 runsvdir -P /etc/service log: 

runsvdir其实是一套组件,这些组件可以满足用户的各种需求,核心组件包括了runsvdir,runsv, chpst,svlogd以及sv。

创建模板

注意输出结果中的runsvdir -P /etc/service log:......., 它的意思是runsvdir会监控/etc/service/目录下的文件,这些文件用于配置被监控的服务。

被监控的服务是通过在/etc/service目录下创建子目录,并添加可执行脚本run来实现的。

当runsvdir发现新的配置文件时,它就会自动启动一个runsv进程来管理这个配置的服务。

runit的设计思想就是每个组件的功能是完全独立的,以便管理。可以使用man命令查看具体组件的用法:

# man runsvdir

确保存在/etc/service,如果不存在,则使用mkdir创建相应目录:

# mkdir /etc/service

为了便于开发与测试,这里我们不直接在/etc/service/目录中添加配置文件,而是创建一个暂存的目录来放置配置文件。
当我们满意自己的测试之后,再使用软链接,将暂存目录链接到/etc/service

创建/etc/runit作为暂存目录。

# mkdir  /etc/runit

在创建一个真正的runit服务之前,我们先创建一个模板。这个模板将展示runit的基本用法,以后可以直接使用这个模板创建新的服务。
首先创建template目录:

# mkdir /etc/runit/template

接下来,创建run脚本:

#!/bin/sh -e
exec 2>&1
exec chpst -u USER COMMAND

给run添加可执行权限:

# chmod +x /etc/runit/template/run

这个脚本首先将标准错误输出流输出到标准输出流,然后执行chpst命令。chpst命令用来指定使用哪个用户执行命令。由于run脚本默认被root用户执行,通过chpst可以将run配置为普通用户来执行。通过man命令可以查看chpst的更多信息。

# man chpst

当runsvdir检查到/etc/service目录下包含一个新的目录时,runsvdir会启动一个runsv进程来执行和监控run脚本。通过man命令查看runsv的更多信息:

#man runsv

你可能注意runsv还可以监控日志服务,日志在应用中非常的重要。下面创建一个日志模板。

首先创建log目录:

# mkdir /etc/runit/template/log

然后创建run脚本:

#!/bin/sh
exec chpst -u USER svlogd -tt LOGDIR

给run脚本添加可执行权限:

# chmod +x /etc/runit/template/log/run

上面的脚本使用chpst启动一个svlogd守护进程,该进程将日志信息写到LOGDIR目录中。
使用man命令获取更多关于svlodg的信息:

# man svlogd

当runsvdir在/etc/service/目录中发现新的配置时,它会继续查找子目录log,如果找到了则启动runsv进程来执行和监控log目录下的run脚本。

服务示例

接下来,我们使用上面创建的模板来创建一个简单的服务配置。首先创建需要再run脚本中被chpst使用的用户:

# adduser foo

接下来创建放置服务配置的目录,并将它的所属用户与用户组设置为foo。

# mkdir /opt/example
# chown foo:foo /opt/example

接下来切换到foo用户:

# su foo

/opt/example目录中添加脚本foo-service.sh:

#!/bin/bash

echo "Started service..."

for i in {1..30}
do
    echo "Doing stuff..."
    sleep 1
done

echo "Oh no I crashed..." >&2
exit 1

给脚本赋予执行权限:

# chmod +x /opt/example/foo-service.sh

上面的脚本模拟了一个真实的应用,每隔1秒打印一次日志信息,最后打印一次错误信息。可以尝试执行这个脚本:

# /opt/example/foo-service.sh

接下来创建包含日志服务的目录:

# mkdir /opt/example/logs

再切换回root用户。

# exit

接下来使用之前创建的模板来监控这个示例服务,将暂存目录中的模板文件拷贝至新的目录example:

# cp -R /etc/runit/template /etc/runit/example

更新/etc/runit/example/run脚本的内容,使用foo用户来执行foo-service.sh脚本。

#!/bin/sh -e
exec 2>&1
exec chpst -u foo /opt/example/foo-service.sh

同样的,更新/etc/runit/example/log/run脚本内容:

#!/bin/sh
exec chpst -u foo svlogd -tt /opt/example/logs

在将服务部署到/etc/service前,首先测试下配置是否正确:

# /etc/runit/example/run

如果脚本运行正常,就可以部署服务了,创建一个软链接:

# ln -s /etc/runit/example /etc/service/example

不出意外的话,runsvdir会检测到我们配置的两个服务,然后启动两个runsv进程来执行并监控服务。通过下面的命令可以检测服务是否正常运行。

# sv status example

输出结果如下所示:

run: example: (pid 3483) 3s; run: log: (pid 3324) 154s

使用tail命令可以查看日志信息:

# tail -f /opt/example/logs/current

你会看到日志信息以及异常信息,接着服务重启。

管理服务

最后,我们再来学习下sv用法,sv用来手动管理我们的服务。

检查服务的状态

sv status example

停止服务

sv stop example

停止服务之后不会再输出日志信息,也不会再自动重启。

重启服务

sv restart example

更多用法

man sv

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/9428.html

相关文章

  • [] runit 快速入门

    摘要:译自概要通过这篇教程,我们可以快速了解并搭建起相应服务。监控运行的服务,当服务发生意外中断的时候,自动重启服务。的设计思想就是每个组件的功能是完全独立的,以便管理。创建作为暂存目录。由于脚本默认被用户执行,通过可以将配置为普通用户来执行。 译自:runit quick start 概要 通过这篇教程,我们可以快速了解runit并搭建起相应服务。 runit是一个用于服务监控的UNIX软...

    googollee 评论0 收藏0
  • AI学习路线

    摘要:针对公司样本不足,采用小样本技术和深度学习技术结合,是项目落地的解决方案。深度学习作为当前机器学习领域最热门的技术之一,已经在图像处理领域获得了应用,并且展现出巨大的前景。旨在帮助同学们快速上手如何使用库来完整机器学习案例。 阶段一、人工智能基础 - 高等数学必知必会 本阶段主要从数据分析、概率论和线性代数及矩阵和凸优化这四大块讲解基础,旨在训练大家逻辑能力,分析能力。拥有良好的数学基...

    xuweijian 评论0 收藏0
  • Mono、Nginx、Jexus组合测试

    摘要:因为要将平台和应用化,需要测试并选择部署工具及方式。页面部署独立版相关部署独立版说明独立版是指将的集成进来的,据说使用上跟差不多。接下来新建文件夹点击下载打包好的文件文件中的文件夹分别用于存放要部署的三类文件。 因为要将平台和应用Docker化,需要测试并选择部署工具及方式。 页面部署:Nginx;Jexus;Jexus独立版; .Net相关(MVC、API、exe)部署:Mono ...

    whinc 评论0 收藏0
  • Mono、Nginx、Jexus组合测试

    摘要:因为要将平台和应用化,需要测试并选择部署工具及方式。页面部署独立版相关部署独立版说明独立版是指将的集成进来的,据说使用上跟差不多。接下来新建文件夹点击下载打包好的文件文件中的文件夹分别用于存放要部署的三类文件。 因为要将平台和应用Docker化,需要测试并选择部署工具及方式。 页面部署:Nginx;Jexus;Jexus独立版; .Net相关(MVC、API、exe)部署:Mono ...

    刘福 评论0 收藏0
  • 【Docker实战入门学习笔记】什么是docker?

    摘要:实现前述目的的方式有两种在一个文件中指定一个基础镜像及需要完成的修改或通过运行一个镜像,对其进行修改并提交。容器对外公开服务是必要的,因此允许公开容器的特定端口。镜像必须完全可移植,不允许例外。 Docker是一个相对较新且发展非常快速的项目,可用来创建非常轻量的虚拟机。注意,这里的引号非常重要,Docker创建的并非真正的虚拟机,而更像是打了激素的chroot,嗯,是大量的激素。 D...

    seanHai 评论0 收藏0

发表评论

0条评论

Karrdy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<