Files
ECAP_Server/config/pt
T
2026-06-16 11:18:22 +08:00

227 lines
6.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 日志轮换函数
rotate_log() {
local LOG_FILE="$1" # 日志文件路径
local MAX_SIZE="$2" # 最大日志文件大小(如 50M
local MAX_BACKUPS="$3" # 保留的最大备份数量
# 如果日志文件是 /dev/null,直接返回,不进行轮换
if [ "$LOG_FILE" == "/dev/null" ]; then
echo "日志文件是 /dev/null,跳过日志轮换"
return
fi
local LOG_DIR=$(dirname "$LOG_FILE") # 日志文件所在的目录
local DATE_FORMAT=$(date +"%Y%m%d-%H%M%S") # 当前日期和时间格式
# 检查日志文件是否存在
if [ ! -f "$LOG_FILE" ]; then
echo "日志文件不存在,创建新日志文件: $LOG_FILE"
touch "$LOG_FILE"
fi
# 检查日志文件的大小
log_size=$(stat -c %s "$LOG_FILE") # 获取日志文件的大小(字节)
max_size_bytes=$(numfmt --from=iec $MAX_SIZE) # 转换最大大小为字节
# 如果日志文件大小超过限制,进行轮换
if [ "$log_size" -ge "$max_size_bytes" ]; then
echo "日志文件超过最大限制 $MAX_SIZE,开始轮换日志"
# 创建备份目录(如果没有的话)
mkdir -p "$LOG_DIR/backups"
# 获取备份文件名
backup_file="${LOG_DIR}/backups/$(basename "$LOG_FILE").${DATE_FORMAT}"
# # 备份当前日志文件
# mv "$LOG_FILE" "$backup_file"
# echo "备份日志为: $backup_file"
#
# # 创建一个新的空日志文件
# touch "$LOG_FILE"
# 复制当前日志作为备份(不动 inode)
cp "$LOG_FILE" "$backup_file"
echo "备份日志为: $backup_file"
# 截断原日志文件(FD 不变)
: > "$LOG_FILE"
# 压缩备份日志文件
gzip "$backup_file"
echo "压缩备份日志为: ${backup_file}.gz"
# 删除多余的备份文件(如果超过最大保留数量)
backups_count=$(ls "$LOG_DIR/backups" | grep -E "^$(basename "$LOG_FILE")" | wc -l)
if [ "$backups_count" -gt "$MAX_BACKUPS" ]; then
# 删除最早的备份
oldest_backup=$(ls -t "$LOG_DIR/backups" | grep -E "^$(basename "$LOG_FILE")" | tail -n 1)
rm "${LOG_DIR}/backups/$oldest_backup"
echo "删除最早的备份日志: ${LOG_DIR}/backups/$oldest_backup"
fi
fi
}
DIR="$(cd "$(dirname "$0")" && pwd)"
BOOT_TIME=$(uptime -s) # 使用 uptime 命令获取系统的开机时间
MAX_SIZE="1M" # 最大日志文件大小
MAX_BACKUPS=2 # 保留的最大备份数量
# 自动崩溃收集服务
#sudo systemctl stop apport.service
#sudo systemctl disable apport.service
#ulimit -c unlimited
#echo "/home/heco/ys_ecap_server/core/core_%e_${BOOT_TIME}_.%t.%p" | tee /proc/sys/kernel/core_pattern
USE_VALGRIND=0
USE_data_process=0
NAME1="data_process"
NAME2="ecap_server"
#LOG_PATH1="/dev/null"
#LOG_PATH2="/dev/null"
LOG_PATH1="$DIR/data_process.log"
LOG_PATH2="$DIR/ecap_server.log"
if [ "$USE_data_process" == 1 ]; then
rotate_log "$LOG_PATH1" "$MAX_SIZE" "$MAX_BACKUPS"
fi
rotate_log "$LOG_PATH2" "$MAX_SIZE" "$MAX_BACKUPS"
# Ensure the log files exist and are writable
if [ "$USE_data_process" == 1 ]; then
echo "系统开机时间: $BOOT_TIME" >> "${LOG_PATH1}"
touch "${LOG_PATH1}"
fi
echo "系统开机时间: $BOOT_TIME" >> "${LOG_PATH2}"
touch "${LOG_PATH2}"
echo "${DIR} 创建log文件成功"
if [ "$USE_VALGRIND" == 1 ]; then
echo "启用valgrind内存检查程序"
valgrind --leak-check=full --log-file=${DIR}/${NAME2}_valgrind.log --show-leak-kinds=all ${DIR}/${NAME2} >> "${LOG_PATH2}" 2>&1 &
fi
SLEEP_SEC="${1:-10}"
sleep "$SLEEP_SEC"
echo "等待 ${SLEEP_SEC}s 完成"
if [ "$USE_data_process" == 1 ]; then
echo "第一次启动 ${NAME1}"
${DIR}/${NAME1} >> "${LOG_PATH1}" 2>&1 &
if [ $? -ne 0 ]; then
echo "第一次启动 Failed to start ${NAME1} at $(date)" >> "${LOG_PATH1}"
fi
fi
restart_count_2=0
echo "第一次启动 ${NAME2}"
${DIR}/${NAME2} >> "${LOG_PATH2}" 2>&1 &
if [ $? -ne 0 ]; then
echo "第一次启动 Failed to start ${NAME2} at $(date)" >> "${LOG_PATH2}"
fi
while true; do
# 监控 data_process
if [ "$USE_data_process" == 1 ]; then
if ! pgrep -x "$NAME1" >/dev/null; then
restart_count_1=$((restart_count_1 + 1))
echo "重启 ${NAME1} at $(date) - count: ${restart_count_1}" >> "${LOG_PATH1}"
echo "重启 ${NAME1} at $(date) - count: ${restart_count_1}"
# 真正重启程序
${DIR}/${NAME1} >> "${LOG_PATH1}" 2>&1 &
if [ $? -ne 0 ]; then
echo "Failed to start ${NAME1} at $(date)" >> "${LOG_PATH1}"
fi
fi
fi
sleep 60
# 监控 ecap_server
if [ "$USE_VALGRIND" == 0 ]; then
if ! pgrep -x "$NAME2" >/dev/null; then
ss -ltnp >> "${LOG_PATH2}"
restart_count_2=$((restart_count_2 + 1))
echo "重启 ${NAME2} at $(date) - count: ${restart_count_2}" >> "${LOG_PATH2}"
echo "重启 ${NAME2} at $(date) - count: ${restart_count_2}"
# 真正启动
${DIR}/${NAME2} >> "${LOG_PATH2}" 2>&1 &
if [ $? -ne 0 ]; then
echo "Failed to start ${NAME2} at $(date)" >> "${LOG_PATH2}"
fi
fi
fi
if [ "$USE_data_process" == 1 ]; then
rotate_log "$LOG_PATH1" "$MAX_SIZE" "$MAX_BACKUPS"
fi
rotate_log "$LOG_PATH2" "$MAX_SIZE" "$MAX_BACKUPS"
done
# tail -f /home/heco/ys_ecap_server/ecap_1201/data_process.log
# tail -f /home/heco/ys_ecap_server/ecap_1201/ecap_server.log
# multitail /home/heco/ys_ecap_server/ecap_1201/data_process.log /home/heco/ys_ecap_server/ecap_1201/ecap_server.log
# kill -SIGINT <pid>
# pkill -SIGINT <process-name>
# pkill -SIGINT 1125ecap_server
# pgrep -l 1125ecap_server
# [ubuntu创建守护进程,并设置开机自启动(rc.local,rc_local.sercive)] https://blog.csdn.net/weixin_46954054/article/details/134862013
# [Ubuntu开机自启动脚本/命令的几种方案] https://blog.csdn.net/weixin_43455581/article/details/107815743
# sudo pkill protect.bash && sudo pkill -SIGINT ecap_server && pgrep -l protect.bash
# pgrep -l protect.bash
# sudo pkill protect.bash
# sudo pkill -SIGINT ecap_server
# /home/heco/ys_ecap_server/protect.bash ecap_server
# kill -SIGINT <pid>
# pkill -SIGINT <process-name>
# pkill -SIGINT 1125ecap_server
# pgrep -l 1125ecap_server
# [ubuntu创建守护进程,并设置开机自启动(rc.local,rc_local.sercive)] https://blog.csdn.net/weixin_46954054/article/details/134862013
# [Ubuntu开机自启动脚本/命令的几种方案] https://blog.csdn.net/weixin_43455581/article/details/107815743
# pgrep -l protect.bash
# pkill protect.bash
# /home/heco/ys_ecap_server/protect.bash ecap_server
# sudo systemctl daemon-reload
# sudo systemctl enable rc-local.service # 设置开机自启
# sudo systemctl disable rc-local.service # 关闭开机自启
# sudo systemctl start rc-local.service # 立即启动服务
# sudo systemctl status rc-local.service