本帖最后由 lyfff 于 2020-6-13 17:40 编辑
大概很久以前呢,我在帮一个朋友的服务器(UBUNTU)安插一个后台运行的服务,用supervisor来管理,朋友会偶尔用用,但我也不大知道是用来干什么的。那么,干脆今天在这里先把当年的步骤记下来,当作方便我的一个朋友想起来要用的时候,回来取经的地方吧。 服务器运行的是Ubuntu,用到的命令也是Linux的。先把接入HA后的UI界面卡片截图放上来,给大家看看。 思路是这样的: 这个后台服务是通过supervisor来管理的,Supervisor有Web端的控制后台,所以要开启Supervisor的web服务,然后HA通过shell command来调用lynx命令去模拟登录web后台,点击其中的某个按钮链接,达到控制supervisor的目的,不需要root权限。
启动这个后台程序的命令(暂且叫它做“V”)是这样的:
/usr/bin/v --config=/etc/v/config.json
可见这个命令的所有参数都写在/etc/v/config.json这个配置文件中,我们只要再supervisor的配置中写下他的命令/usr/bin/v--config=/etc/v/config.json,当程序的配置需要变化时,更换/etc/v/config.json文件,然后让supervisor重启这个程序即可。那么,开搞: 1、首先打开Supervisor的web服务: 在Supervisor的配置文件/etc/supervisor/supervisord.conf中加入:
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (supervisor的web服务绑定的IP和端口)
username=你的用户名 ; (访问web后台所用的用户名)
password=你的密码 ; (访问web后台所用的密码)
重启supervisor:
sudo systemctl restart supervisor.service
此时即可使用http://你的ip:9001/访问supervisor的web后台。 2、编写V的配置文件: 略,配置文件的写法见V的开发文档(因为我也没说V是啥软件,自己去它的 项目地址看看吧)
将配置文件放到/etc/v/。因为我的V的经常用的配置有3个,所以我在/etc/v/路径中分别放有4个配置文件:
$ ls /etc/v/ -lh
总用量 24K
-rw-r--r-- 1 root root 768 6月 7 01:03 config.1.json
-rw-r--r-- 1 root root 768 6月 7 01:06 config.2.json
-rw-r--r-- 1 root root 768 6月 7 01:06 config.3.json
-rw-r--r-- 1 root root 768 5月 23 19:21 config.json
其中的config.json是随意复制上面的某个config.*.json文件得到的,与config.*.json是完全相同的副本。 3、将V软件的启动命令写到supervisor的配置里: 在路径/etc/supervisor/conf.d/中,添加一个文件v.conf:
[program:v]
# 命令
command=/usr/bin/v --config=/etc/v/config.json
# 是否自启
autostart=true
# 什么情况下自动重启程序(false --不重启、unexpected --意外退出时、或 true --总是)
autorestart=true
# 命令启动所需的时间(秒)(在此之后程序状态将由 Starting 转为 Running)
#startsecs=10
# 允许启动失败次数
startretries=10
# 是否将 stderr 信息重定向到 stdout 文件
redirect_stderr=false
# stdout 日志输出的目录(NONE 为不输出)
stdout_logfile=NONE
# stderr 日志输出的目录(NONE 为不输出)
stderr_logfile=/var/log/supervisor/v_local/v.log
重新加载supervisor的配置:
sudo supervisorctl reload
到这里,服务就会开始运行了。 4、接再来就是HA的配置文件了: 在HA的配置文件中加入:
shell_command:
# 切换V的配置文件
switch_config_file_to_01: >
cp /etc/v/config.1.json /etc/v/config.json
switch_config_file_to_02: >
cp /etc/v/config.2.json /etc/v/config.json
switch_config_file_to_03: >
cp /etc/v/config.3.json /etc/v/config.json
# 停止 v服务
stop_v:>
lynx -mime_header -auth=用户名:密码 "http://127.0.0.1:9001/index.html?processname=v&action=stop"
# 重启 v服务
restart_v: >
lynx -mime_header -auth=用户名:密码 http://127.0.0.1:9001/index.html?processname=v&action=restart
input_select:
v_service:
name: V Service Selector
icon: mdi:ip-network
options:
- '线路1'
- '线路2'
- '线路3'
automation:
- alias: Switch V Service
trigger:
platform: state
entity_id: input_select. v_service
action:
- service: shell_command.stop_v
- service_template: >
{% if is_state("input_select.v_service", "线路1") %}
shell_command.switch_config_file_to_01
{% elif is_state("input_select.v_service", "线路2") %}
shell_command.switch_config_file_to_02
{% else %}
shell_command.switch_config_file_to_03
{% endif %}
- delay: 3
shell_command.restart_v
保存重启HA即可。 上面的代码编辑器有些缩进不太对的,我也不知咋调,怕是越调越乱。 UI中的卡片:
entities:
- entity: input_select.v_service
name: 选择路线
show_header_toggle: false
type: entities
不知道此文写得正不正确,如果不正确,轻轻删掉吧。
|