5 个不稳定版本
使用旧的 Rust 2015
0.3.0 | 2018 年 10 月 19 日 |
---|---|
0.2.1 | 2018 年 10 月 18 日 |
0.2.0 | 2018 年 10 月 11 日 |
0.1.2 | 2018 年 10 月 5 日 |
0.1.1 | 2018 年 10 月 2 日 |
#514 in 配置
80KB
1.5K SLoC
Riffol
Riffol 是一个监管进程,可以在类 Unix 系统上作为传统守护进程运行,也可以作为容器的 init
系统(如 tini)。
Riffol 可以通过创建由应用程序和健康检查组成的应用程序组进行配置。
[来源]
+--------+
| Riffol |
+----+---+
|
|
|
+------v------+
| Application |
| Group +-------+-------------+
+------+------+ | |
| | |
| | |
| | |
+------v------+ +---v----+ +----v-----+
| Application | | Health | | Resource |
+-------------+ | Check | | Limits |
+--------+ +----------+
Riffol 使用来自 https://github.com/riboseinc/event-configuration-models 的统一配置模型来定义其配置语法、启动配置以及运行时配置。
Riffol 使用 Rust 实现。
从源代码构建
请确保已安装 Rust 环境。如果没有,请按照 Rust 安装指南 进行操作。
[来源,shell]
cargo install --git https:/github.com/riboseinc/riffol
此命令将构建一个 riffol
二进制文件并将其存储在 bin
目录下,该目录位于 $CARGO_HOME
之下 - 通常为 ~/.cargo/bin/riffol
。
用法
riffol [-f 配置文件]
Riffol 需要一个配置文件。默认文件位置为 /etc/riffol.conf
。
此位置可以通过 RIFFOL_CONFIG
环境变量或使用 -f
命令行标志来指定。
配置
初始化
创建应用程序组的主要配置
[来源]
init name {
application_groups [
applicationgroup.name
]
}
例如:
[来源]
init web {
application_groups ["applicationgroup.webstack"]
}
应用程序组
[来源]
application_group name {
applications [
"application.name"
]
}
例如:
[来源]
application_group webstack {
applications [
"application.db"
"application.www"
]
}
应用程序
[来源]
application "name" {
mode application_mode
requires [other applications]
start [executable start args]
stop [executable stop args]
pidfile file
dir working_directory
env {
new var1 value
new var2 value
pass oldname newname
}
env_file env_filename
stdout stream_destination
stderr stream_destination
uid int
gid int
healthchecks [
"healthcheck.name"
]
}
application_mode
可以是 oneshot
、simple
或 forking
之一
应用程序将以干净的环境启动。可以通过 env
和 env_file
字段添加环境变量。
env
的值可以有两种形式。命令env new <name> <value>
用于创建一个新的变量并赋予其提供的值。命令env pass <oldname> <newname>
用于创建一个名为newname
的新变量,其值来自Riffol的环境变量oldname
。
[来源]
env {
new {
VAR1 value1
VAR2 value2
}
pass {
ENV1 VAR3
ENV2 VAR4
}
}
这会创建两个新的环境变量,分别为VAR1
和VAR2
,它们的值分别为value1
和value2
。同时,将变量ENV1
和ENV2
传递到新变量VAR3
和VAR4
中。
env_file <filename>
读取一个环境变量的文件,每行一个环境变量,格式如下
[来源]
VAR1=value1
VAR2=value2
VAR3
VAR4=
VAR1
和VAR2
分别设置为value1
和value2
。而VAR3
和VAR4
则设置为空值""。
env_file
字段在env
字段之前处理,因此使用env
设置的变量将覆盖从env_file
读取的变量。
stream_destination
可以是以下之一:[source]
file [
filename
]
[来源]
syslog {
socket unix_sock_address
facility syslog_facility
severity syslog_severity
}
[来源]
rsyslog {
address remote_inet_address
local local_inet_address
facility syslog_facility
severity syslog_severity
}
syslog_facility
可以是以下之一:kern
、user
、mail
、daemon
、auth
、syslog
、lpr
、news
、uucp
、cron
、authpriv
、ftp
、local0
、local1
、local2
、local3
、local4
、local5
、local6
或local7
。(默认值为daemon
)
syslog_severity
可以是以下之一:emerg
、alert
、crit
、err
、warning
、notice
、info
或debug
(默认值为debug
)
healthcheckfail
可以是以下之一:start
、restart
或stop
。例如。
[来源]
application www {
exec "/etc/init.d/http"
dir "/var/www"
env {
new var1key var1value
new var2key var2value
pass oldname newname
}
env_file "/etc/httpd/morevars"
start start
stop stop
restart restart
stdout file "/var/log/riffol_www.log"
stderr syslog {
}
uid 0
gid 0
healthchecks [
"healthcheck.www"
]
healthcheckfail restart
}
健康检查
[来源]
healthcheck name {
checks [
"class://value"
]
interval int
timeout int
}
有几个check
类
。 df
,磁盘空闲空间。 proc
,进程名称。 tcp
,TCP连接。 udp
,UDP连接。 http
,建立HTTP连接。 https
,建立HTTPS连接
参数
。 interval
,检查的间隔(以秒为单位)。 timeout
,网络连接的超时时间(以秒为单位)
例如:
[来源]
healthcheck db {
checks [
"df:///var/lib/mysql:512"
"proc://mysqld",
"tcp://127.0.0.1:3306"
]
interval 60
timeout 10
}
资源限制
[来源]
limits name {
max_procs int
max_mem int
}
例如。
[来源]
limits db {
max_procs 4
max_mem 1024
}
... Riffol?
https://en.wikipedia.org/wiki/Salmon_run#The_spawning
雌性鲑鱼的卵称为其鱼卵。为了产卵,雌性鲑鱼在砾石作为其河床的湍流处建造一个称为产卵场的窝,称为鱼窝。湍流是一种相对较浅的河段,水流湍急且流速较快。
通过在“riffol”中拼写一个O,我们将氧气的化学符号放入了这个词中:我们正在氧化 Riffol。这很有意义,因为Riffol在Rust中。
依赖项
~12–22MB
~312K SLoC