530 lines
12 KiB
Markdown
530 lines
12 KiB
Markdown
## 1. 创建包装脚本
|
||
|
||
### 1.1 req-zmq-config1 的包装脚本
|
||
```bash
|
||
sudo tee /usr/local/bin/req-zmq-config1-wrapper.sh > /dev/null << 'EOF'
|
||
#!/bin/bash
|
||
PREFIX="/home/system/service/boyi_req_zmq_relay"
|
||
LOG_DIR="$PREFIX/logs"
|
||
DATE=$(date +%Y%m%d)
|
||
LOG_FILE="$LOG_DIR/zmq_relay_1_$DATE.log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
cd "$PREFIX"
|
||
exec /home/anaconda3/bin/python "$PREFIX/zmq_relay.py" config1.conf >> "$LOG_FILE" 2>&1
|
||
EOF
|
||
sudo chmod +x /usr/local/bin/req-zmq-config1-wrapper.sh
|
||
```
|
||
|
||
### 1.2 req-zmq-config2 的包装脚本
|
||
```bash
|
||
sudo tee /usr/local/bin/req-zmq-config2-wrapper.sh > /dev/null << 'EOF'
|
||
#!/bin/bash
|
||
PREFIX="/home/system/service/boyi_req_zmq_relay"
|
||
LOG_DIR="$PREFIX/logs"
|
||
DATE=$(date +%Y%m%d)
|
||
LOG_FILE="$LOG_DIR/zmq_relay_2_$DATE.log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
cd "$PREFIX"
|
||
exec /home/anaconda3/bin/python "$PREFIX/zmq_relay.py" config2.conf >> "$LOG_FILE" 2>&1
|
||
EOF
|
||
sudo chmod +x /usr/local/bin/req-zmq-config2-wrapper.sh
|
||
```
|
||
|
||
### 1.3 resp-zmq 的包装脚本
|
||
```bash
|
||
sudo tee /usr/local/bin/resp-zmq-wrapper.sh > /dev/null << 'EOF'
|
||
#!/bin/bash
|
||
PREFIX="/home/system/service/boyi_resp_zmq_relay"
|
||
LOG_DIR="$PREFIX/logs"
|
||
DATE=$(date +%Y%m%d)
|
||
LOG_FILE="$LOG_DIR/zmq_relay_$DATE.log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
cd "$PREFIX"
|
||
exec /home/anaconda3/bin/python "$PREFIX/zmq_relay.py" >> "$LOG_FILE" 2>&1
|
||
EOF
|
||
sudo chmod +x /usr/local/bin/resp-zmq-wrapper.sh
|
||
```
|
||
|
||
### 1.4 risk-control-zmq 的包装脚本
|
||
```bash
|
||
sudo tee /usr/local/bin/risk-control-zmq-wrapper.sh > /dev/null << 'EOF'
|
||
#!/bin/bash
|
||
PREFIX="/home/system/service/boyi_req_zmq_risk_control"
|
||
LOG_DIR="$PREFIX/logs"
|
||
DATE=$(date +%Y%m%d)
|
||
LOG_FILE="$LOG_DIR/zmq_relay_$DATE.log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
cd "$PREFIX"
|
||
exec /home/anaconda3/bin/python "$PREFIX/zmq_relay.py" >> "$LOG_FILE" 2>&1
|
||
EOF
|
||
sudo chmod +x /usr/local/bin/risk-control-zmq-wrapper.sh
|
||
```
|
||
|
||
## 2. 创建 systemd 服务文件
|
||
|
||
### 2.1 req-zmq-config1.service
|
||
```bash
|
||
sudo tee /etc/systemd/system/req-zmq-config1.service > /dev/null << 'EOF'
|
||
[Unit]
|
||
Description=BoYi ZMQ Relay Service (Requester Config1)
|
||
After=network.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
Group=root
|
||
WorkingDirectory=/home/system/service/boyi_req_zmq_relay
|
||
Environment=PYTHONPATH=/home/system/service/boyi_req_zmq_relay
|
||
|
||
# 使用包装脚本启动
|
||
ExecStart=/usr/local/bin/req-zmq-config1-wrapper.sh
|
||
|
||
# 进程监控和重启配置
|
||
Restart=always
|
||
RestartSec=10
|
||
StartLimitInterval=0
|
||
StartLimitBurst=5
|
||
|
||
# 资源限制(可选)
|
||
MemoryLimit=512M
|
||
CPUQuota=100%
|
||
|
||
# 信号处理
|
||
KillMode=process
|
||
KillSignal=SIGTERM
|
||
TimeoutStopSec=30
|
||
SendSIGKILL=yes
|
||
|
||
# 日志配置 - 不输出到journal,只输出到文件
|
||
StandardOutput=null
|
||
StandardError=null
|
||
SyslogIdentifier=req-zmq-config1
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
### 2.2 req-zmq-config2.service
|
||
```bash
|
||
sudo tee /etc/systemd/system/req-zmq-config2.service > /dev/null << 'EOF'
|
||
[Unit]
|
||
Description=BoYi ZMQ Relay Service (Requester Config2)
|
||
After=network.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
Group=root
|
||
WorkingDirectory=/home/system/service/boyi_req_zmq_relay
|
||
Environment=PYTHONPATH=/home/system/service/boyi_req_zmq_relay
|
||
|
||
# 使用包装脚本启动
|
||
ExecStart=/usr/local/bin/req-zmq-config2-wrapper.sh
|
||
|
||
# 进程监控和重启配置
|
||
Restart=always
|
||
RestartSec=10
|
||
StartLimitInterval=0
|
||
StartLimitBurst=5
|
||
|
||
# 资源限制(可选)
|
||
MemoryLimit=512M
|
||
CPUQuota=100%
|
||
|
||
# 信号处理
|
||
KillMode=process
|
||
KillSignal=SIGTERM
|
||
TimeoutStopSec=30
|
||
SendSIGKILL=yes
|
||
|
||
# 日志配置 - 不输出到journal,只输出到文件
|
||
StandardOutput=null
|
||
StandardError=null
|
||
SyslogIdentifier=req-zmq-config2
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
### 2.3 resp-zmq.service
|
||
```bash
|
||
sudo tee /etc/systemd/system/resp-zmq.service > /dev/null << 'EOF'
|
||
[Unit]
|
||
Description=BoYi ZMQ Relay Service (Responder)
|
||
After=network.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
Group=root
|
||
WorkingDirectory=/home/system/service/boyi_resp_zmq_relay
|
||
Environment=PYTHONPATH=/home/system/service/boyi_resp_zmq_relay
|
||
|
||
# 使用包装脚本启动
|
||
ExecStart=/usr/local/bin/resp-zmq-wrapper.sh
|
||
|
||
# 进程监控和重启配置
|
||
Restart=always
|
||
RestartSec=10
|
||
StartLimitInterval=0
|
||
StartLimitBurst=5
|
||
|
||
# 资源限制(可选)
|
||
MemoryLimit=512M
|
||
CPUQuota=100%
|
||
|
||
# 信号处理
|
||
KillMode=process
|
||
KillSignal=SIGTERM
|
||
TimeoutStopSec=30
|
||
SendSIGKILL=yes
|
||
|
||
# 日志配置 - 不输出到journal,只输出到文件
|
||
StandardOutput=null
|
||
StandardError=null
|
||
SyslogIdentifier=resp-zmq
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
### 2.4 risk-control-zmq.service
|
||
```bash
|
||
sudo tee /etc/systemd/system/risk-control-zmq.service > /dev/null << 'EOF'
|
||
[Unit]
|
||
Description=BoYi ZMQ Risk Control Service
|
||
After=network.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
Group=root
|
||
WorkingDirectory=/home/system/service/boyi_req_zmq_risk_control
|
||
Environment=PYTHONPATH=/home/system/service/boyi_req_zmq_risk_control
|
||
|
||
# 使用包装脚本启动
|
||
ExecStart=/usr/local/bin/risk-control-zmq-wrapper.sh
|
||
|
||
# 进程监控和重启配置
|
||
Restart=always
|
||
RestartSec=10
|
||
StartLimitInterval=0
|
||
StartLimitBurst=5
|
||
|
||
# 资源限制(可选)
|
||
MemoryLimit=512M
|
||
CPUQuota=100%
|
||
|
||
# 信号处理
|
||
KillMode=process
|
||
KillSignal=SIGTERM
|
||
TimeoutStopSec=30
|
||
SendSIGKILL=yes
|
||
|
||
# 日志配置 - 不输出到journal,只输出到文件
|
||
StandardOutput=null
|
||
StandardError=null
|
||
SyslogIdentifier=risk-control-zmq
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
## 3. 创建日志轮转配置
|
||
|
||
```bash
|
||
sudo tee /etc/logrotate.d/zmq-services-dated > /dev/null << 'EOF'
|
||
/home/system/service/boyi_req_zmq_relay/logs/zmq_relay_*.log
|
||
/home/system/service/boyi_resp_zmq_relay/logs/zmq_relay_*.log
|
||
/home/system/service/boyi_req_zmq_risk_control/logs/zmq_relay_*.log {
|
||
daily
|
||
rotate 30
|
||
compress
|
||
delaycompress
|
||
missingok
|
||
notifempty
|
||
create 644 root root
|
||
dateext
|
||
dateformat .%Y%m%d
|
||
sharedscripts
|
||
postrotate
|
||
# 重新加载服务以使用新的日志文件
|
||
systemctl kill -s HUP req-zmq-config1.service >/dev/null 2>&1 || true
|
||
systemctl kill -s HUP req-zmq-config2.service >/dev/null 2>&1 || true
|
||
systemctl kill -s HUP resp-zmq.service >/dev/null 2>&1 || true
|
||
systemctl kill -s HUP risk-control-zmq.service >/dev/null 2>&1 || true
|
||
endscript
|
||
}
|
||
EOF
|
||
```
|
||
|
||
## 4. 部署和测试
|
||
|
||
```bash
|
||
# 重新加载 systemd 配置
|
||
sudo systemctl daemon-reload
|
||
|
||
# 停止旧服务(如果存在)
|
||
sudo systemctl stop req-zmq-config1 req-zmq-config2 resp-zmq risk-control-zmq 2>/dev/null
|
||
|
||
# 创建日志目录
|
||
mkdir -p /home/system/service/boyi_req_zmq_relay/logs
|
||
mkdir -p /home/system/service/boyi_resp_zmq_relay/logs
|
||
mkdir -p /home/system/service/boyi_req_zmq_risk_control/logs
|
||
|
||
# 启动所有服务
|
||
sudo systemctl start req-zmq-config1
|
||
sudo systemctl start req-zmq-config2
|
||
sudo systemctl start resp-zmq
|
||
sudo systemctl start risk-control-zmq
|
||
|
||
# 查看服务状态
|
||
sudo systemctl status req-zmq-config1 req-zmq-config2 resp-zmq risk-control-zmq
|
||
|
||
# 设置开机自启动
|
||
sudo systemctl enable req-zmq-config1 req-zmq-config2 resp-zmq risk-control-zmq
|
||
```
|
||
|
||
四个服务的日志路径:
|
||
- `/home/system/service/boyi_req_zmq_relay/logs/zmq_relay_1_YYYYMMDD.log`
|
||
- `/home/system/service/boyi_req_zmq_relay/logs/zmq_relay_2_YYYYMMDD.log`
|
||
- `/home/system/service/boyi_resp_zmq_relay/logs/zmq_relay_YYYYMMDD.log`
|
||
- `/home/system/service/boyi_req_zmq_risk_control/logs/zmq_relay_YYYYMMDD.log`
|
||
|
||
## 5. 进程监控脚本
|
||
/home/system/zabbix_agent/ps/check_zmq_ps.sh
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# 直接监控四个指定的zmq进程
|
||
|
||
# 定义要监控的进程列表
|
||
declare -a processes=(
|
||
"/home/system/service/boyi_req_zmq_relay/zmq_relay.py config1.conf"
|
||
"/home/system/service/boyi_resp_zmq_relay/zmq_relay.py"
|
||
"/home/system/service/boyi_req_zmq_relay/zmq_relay.py config2.conf"
|
||
"/home/system/service/boyi_req_zmq_risk_control/zmq_relay.py"
|
||
)
|
||
|
||
# 初始化错误数组
|
||
array_error=()
|
||
|
||
# 遍历每个进程进行检查
|
||
for process_cmd in "${processes[@]}"; do
|
||
# 提取Python脚本路径(去掉可能的参数)
|
||
python_script=$(echo "$process_cmd" | awk '{print $1}')
|
||
|
||
# 检查进程是否存在
|
||
actual_count=$(ps -ef | grep -v grep | grep -c "$process_cmd")
|
||
|
||
# 检查进程状态(每个进程应该至少有一个实例在运行)
|
||
if [[ $actual_count -eq 0 ]]; then
|
||
# 进程不存在
|
||
array_error+=("$process_cmd (0/1)")
|
||
elif [[ $actual_count -gt 1 ]]; then
|
||
# 有多个相同进程(可能异常)
|
||
array_error+=("$process_cmd ($actual_count/1)")
|
||
fi
|
||
done
|
||
|
||
# 输出结果
|
||
if [[ ${#array_error[@]} -gt 0 ]]; then
|
||
echo "${array_error[@]}"
|
||
else
|
||
echo 0
|
||
fi
|
||
```
|
||
|
||
---
|
||
# 6. 2.197两个进程
|
||
|
||
## 1. 创建包装脚本
|
||
|
||
### 1.1 req-zmq 的包装脚本(单进程版本)
|
||
```bash
|
||
sudo tee /usr/local/bin/req-zmq-wrapper.sh > /dev/null << 'EOF'
|
||
#!/bin/bash
|
||
PREFIX="/home/system/service/boyi_req_zmq_relay"
|
||
LOG_DIR="$PREFIX/logs"
|
||
DATE=$(date +%Y%m%d)
|
||
LOG_FILE="$LOG_DIR/zmq_relay_$DATE.log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
cd "$PREFIX"
|
||
exec /home/anaconda3/bin/python "$PREFIX/zmq_relay.py" >> "$LOG_FILE" 2>&1
|
||
EOF
|
||
sudo chmod +x /usr/local/bin/req-zmq-wrapper.sh
|
||
```
|
||
|
||
### 1.2 resp-zmq 的包装脚本
|
||
```bash
|
||
sudo tee /usr/local/bin/resp-zmq-wrapper.sh > /dev/null << 'EOF'
|
||
#!/bin/bash
|
||
PREFIX="/home/system/service/boyi_resp_zmq_relay"
|
||
LOG_DIR="$PREFIX/logs"
|
||
DATE=$(date +%Y%m%d)
|
||
LOG_FILE="$LOG_DIR/zmq_relay_$DATE.log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
cd "$PREFIX"
|
||
exec /home/anaconda3/bin/python "$PREFIX/zmq_relay.py" >> "$LOG_FILE" 2>&1
|
||
EOF
|
||
sudo chmod +x /usr/local/bin/resp-zmq-wrapper.sh
|
||
```
|
||
|
||
## 2. 创建 systemd 服务文件
|
||
|
||
### 2.1 req-zmq.service
|
||
```bash
|
||
sudo tee /etc/systemd/system/req-zmq.service > /dev/null << 'EOF'
|
||
[Unit]
|
||
Description=BoYi ZMQ Relay Service (Requester)
|
||
After=network.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
Group=root
|
||
WorkingDirectory=/home/system/service/boyi_req_zmq_relay
|
||
Environment=PYTHONPATH=/home/system/service/boyi_req_zmq_relay
|
||
|
||
# 使用包装脚本启动
|
||
ExecStart=/usr/local/bin/req-zmq-wrapper.sh
|
||
|
||
# 进程监控和重启配置
|
||
Restart=always
|
||
RestartSec=10
|
||
StartLimitInterval=0
|
||
StartLimitBurst=5
|
||
|
||
# 资源限制(可选)
|
||
MemoryLimit=512M
|
||
CPUQuota=100%
|
||
|
||
# 信号处理
|
||
KillMode=process
|
||
KillSignal=SIGTERM
|
||
TimeoutStopSec=30
|
||
SendSIGKILL=yes
|
||
|
||
# 日志配置 - 不输出到journal,只输出到文件
|
||
StandardOutput=null
|
||
StandardError=null
|
||
SyslogIdentifier=req-zmq
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
### 2.2 resp-zmq.service
|
||
```bash
|
||
sudo tee /etc/systemd/system/resp-zmq.service > /dev/null << 'EOF'
|
||
[Unit]
|
||
Description=BoYi ZMQ Relay Service (Responder)
|
||
After=network.target
|
||
Wants=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
Group=root
|
||
WorkingDirectory=/home/system/service/boyi_resp_zmq_relay
|
||
Environment=PYTHONPATH=/home/system/service/boyi_resp_zmq_relay
|
||
|
||
# 使用包装脚本启动
|
||
ExecStart=/usr/local/bin/resp-zmq-wrapper.sh
|
||
|
||
# 进程监控和重启配置
|
||
Restart=always
|
||
RestartSec=10
|
||
StartLimitInterval=0
|
||
StartLimitBurst=5
|
||
|
||
# 资源限制(可选)
|
||
MemoryLimit=512M
|
||
CPUQuota=100%
|
||
|
||
# 信号处理
|
||
KillMode=process
|
||
KillSignal=SIGTERM
|
||
TimeoutStopSec=30
|
||
SendSIGKILL=yes
|
||
|
||
# 日志配置 - 不输出到journal,只输出到文件
|
||
StandardOutput=null
|
||
StandardError=null
|
||
SyslogIdentifier=resp-zmq
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
## 3. 创建日志轮转配置
|
||
|
||
```bash
|
||
sudo tee /etc/logrotate.d/zmq-services-dated > /dev/null << 'EOF'
|
||
/home/system/service/boyi_req_zmq_relay/logs/zmq_relay_*.log
|
||
/home/system/service/boyi_resp_zmq_relay/logs/zmq_relay_*.log {
|
||
daily
|
||
rotate 30
|
||
compress
|
||
delaycompress
|
||
missingok
|
||
notifempty
|
||
create 644 root root
|
||
dateext
|
||
dateformat .%Y%m%d
|
||
sharedscripts
|
||
postrotate
|
||
# 重新加载服务以使用新的日志文件
|
||
systemctl kill -s HUP req-zmq.service >/dev/null 2>&1 || true
|
||
systemctl kill -s HUP resp-zmq.service >/dev/null 2>&1 || true
|
||
endscript
|
||
}
|
||
EOF
|
||
```
|
||
|
||
## 4. 部署和测试
|
||
|
||
```bash
|
||
# 重新加载 systemd 配置
|
||
sudo systemctl daemon-reload
|
||
|
||
# 停止旧进程(使用原来的脚本)
|
||
cd /home/system/service/boyi_req_zmq_relay
|
||
./zmq_relay.sh stop
|
||
|
||
cd /home/system/service/boyi_resp_zmq_relay
|
||
./zmq_relay.sh stop
|
||
|
||
# 启动 systemd 服务
|
||
sudo systemctl start req-zmq
|
||
sudo systemctl start resp-zmq
|
||
|
||
# 查看服务状态
|
||
sudo systemctl status req-zmq resp-zmq
|
||
|
||
# 设置开机自启动
|
||
sudo systemctl enable req-zmq resp-zmq
|
||
```
|
||
|
||
**日志路径:**
|
||
- `/home/system/service/boyi_req_zmq_relay/logs/zmq_relay_YYYYMMDD.log`
|
||
- `/home/system/service/boyi_resp_zmq_relay/logs/zmq_relay_YYYYMMDD.log`
|
||
|