基于框架django编写了python服务,但由于某些原因,发现服务运行一段时间后,由于内存居高不下最终导致服务宕掉,而单位私有云中内存资源吃紧,一直申请不下来,所以只能采用临时办法:在每天凌晨重新启动python服务。
操作系统:centos 7.9
脚本autorestart.sh内容如下:
#!/bin/bash
#查找并杀掉python服务进程的函数
kill_process_on_port() {
local port=$1
local pid_info=$(netstat -tulnp | grep -P ":\b${port}\b" | awk '{print $7}')
if [ -n "$pid_info" ]; then
local pid=$(echo $pid_info | cut -d'/' -f1 | tr -d ' ')
echo "Starting to kill process on port $port..."
show_spinner &
spinner_pid=$!
kill $pid 2>/dev/null
sleep 5 || :
kill -TERM "$spinner_pid" 2>/dev/null
if [ $? -eq 0 ]; then
echo "Process on port $port has been killed."
else
echo "Failed to kill process on port $port."
fi
else
echo "No process found on port $port."
fi
}
#为了在脚本手工执行时,显示友好性,定义了一个动画函数-_-||b
show_spinner() {
local spinner_chars='-\|/'
local spinner_index=0
while true; do
local spinner_state=${spinner_chars:$spinner_index:1}
echo -ne "\r$spinner_state "
spinner_index=$(( (spinner_index + 1) % ${#spinner_chars} ))
sleep 0.2
done
}
echo "Starting to search for process on ports 8001..."
kill_process_on_port 8001
echo "Starting to search for process on ports 8003..."
kill_process_on_port 8003
echo "Starting the Python services on port 8003 and 8001..."
nohup python3 rhzd_server.py 0.0.0.0:8001 > /dev/null 2>&1 &
nohup python3 rhzd_cj_server.py 0.0.0.0:8003 > /dev/null 2>&1 &
echo "Python services has been started."
保存后,使用chomd授执行权限,并编辑crontab,加入执行计划:
0 3 * * * <路径>/autorestart.sh