使用shell脚本每日定时重启动python服务

文章讲述了作者在CentOS7.9环境中使用Django开发的服务因内存问题频繁宕机,通过编写autorestart.sh脚本,在每天凌晨自动检测并重启8001和8003端口的Python服务,以应对单位私有云内存紧张的情况。脚本包括进程查找和杀停、友好的动画显示以及定时任务的设置。
摘要由CSDN通过智能技术生成

基于框架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

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值