一般生产环境下,后台服务+开机自启会通过systemd或docker实现。但是对于家庭服务而言,systemd查看管理不方便,而docker方案需要手动打镜像更新不方便。因此使用supervisor+systemd简便地实现后台服务管理以及开机自启。
supervisor是一个python编写的服务管理工具。因此在安装前,需要先准备python环境。笔者使用miniconda管理python环境,方便后面管理多种python环境。
安装完python环境后,使用pip安装supervisor
安装完成后,需要先生成默认的配置文件(笔者刚开始没有发现有快捷命令,都是手动复制的,后来才发现的)。
1
|
echo_supervisord_conf > supervisord.conf
|
然后就改一下配置,最终的配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
[unix_http_server]
file = /tmp/supervisor.sock
chmod = 0777
#chown= nobody:nogroup
username = macd
password = 11111
[inet_http_server]
port = 0.0.0.0:9001
username = macd
password = 11111
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = false
minfds = 1024
minprocs = 200
umask = 022
#user = chrism
identifier = supervisor
directory = /tmp
nocleanup = true
childlogdir = /tmp
strip_ansi = false
#environment = KEY1="value1",KEY2="value2"
[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
username = macd
password = 11111
prompt = mysupervisor
[program:wol]
command=/home/macd/wol/wol
directory=/home/macd/wol
autostart=true
stdout_logfile=/home/macd/wol/app.log
environment=GIN_MODE="release"
[program:sharefile]
command=/home/macd/sharefile/sharefile
directory=/home/macd/sharefile
autostart=true
environment=GIN_MODE="release"
[program:caddy]
command=/home/macd/sharefile/caddy run
directory=/home/macd/sharefile
autostart=true
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
最后,默认情况下supervisor是不支持开机自启的,所以需要配合systemd实现开机自启。具体可以参考systemd服务创建。下面是systemd的配置,需要注意的执行命令中的-n参数,表示在前台执行,否则默认是后台运行的,无法使用systemd管理supervisor。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[Unit]
Description=supervisord
After=network-online.target
[Service]
ExecStart=/home/macd/miniconda3/envs/common/bin/supervisord -c /home/macd/supervisord.conf -n
User=macd
Group=macd
Restart=always
RestartSec=3
Environment="PATH=/home/macd/miniconda3/envs/common/bin:/home/macd/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
[Install]
WantedBy=default.target
|