近期在ubunt系列服务器上碰见了supervisor的几个坑,因此将服务守护都已经切换到systemd。linux
坑1、资源限制配额不跟随limits.conf
1.咱们在用supervisor守护一个服务A的时候,发现由supervisor拉起的服务文件描述符未跟随系统limits设置。web
[program:servicea] username=root command = bash /etc/servicea.sh autostart = true stopasgroup = true autorestart = true startsecs = 3 stdout_logfile = /var/log/servicea.log cat /proc/$(ps ax|grep servicea|grep -v grep|awk {print $1})/limits |grep open Max open files 1024 4096 files
发现最大的文件描述符仍是1024,对于系统初始化优化的时候,咱们都会更改/etc/security/limits.confbash
root soft nofile 65535 root hard nofile 65535 root soft nproc 65535 root hard nproc 65535 * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535
root@sklinux.com:~# ulimit -SHn 65535
或者比上诉值更大,然而supervisor守护服务,资源限制配额不跟随limits.conf。服务器
坑2、supervisor守护prometheus服务的时候吃掉重要参数
2.咱们在用supervisor守护prometheus服务的时候发现,重要参数被“吃”掉。优化
supervisor中prometeus配置以下:spa
#为方便查看作了换行处理 [program:prometheus] username=root directory=/opt/prometheus/data command = /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.listen-address="8.8.8.8:9090" --storage.tsdb.path="/opt/prometheus/data/" --storage.tsdb.retention.time=90d --web.enable-lifecycle autostart = flase stopasgroup = true autorestart = true startsecs = 3 stdout_logfile = /var/log/prometheus.log
咱们发现每次拉起服务的时候,–storage.tsdb.path=“/opt/prometheus/data/“参数未生效,数据始终默认保存在/data下。 而后经过rest
command = /start.prometheus.sh start.prometheus.sh 内容: #为方便查看作了换行处理 /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.listen-address="8.8.8.8:9090" --storage.tsdb.path="/opt/prometheus/data/" --storage.tsdb.retention.time=90d --web.enable-lifecycle
一样,参数无效。可是经过手工执行/start.prometheus.sh 能够将数据存储路径存在目标路径/opt/prometheus/data/中。
后来,咱们将上诉服务切换为systemd守护,一切ok了! 比较:日志
Systemd
a.稳定可靠
b.支持 Before/After 依赖机制 c.支持 Notify 机制
d.支持基于 cgroup 的资源限制进程
Supervisord
a.支持经过 priority 配置进程启动顺序
b.日志友好方便查阅
c.跨平台使用
d.扩展开发友好,守护业务系统
e.可是bug多,资源限制不足资源