12 KiB
12 KiB
1. 创建包装脚本
1.1 req-zmq-config1 的包装脚本
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 的包装脚本
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 的包装脚本
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 的包装脚本
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
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
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
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
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. 创建日志轮转配置
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. 部署和测试
# 重新加载 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
#!/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 的包装脚本(单进程版本)
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 的包装脚本
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
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
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. 创建日志轮转配置
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. 部署和测试
# 重新加载 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