给小落同学后台加个进程保护


[TOC]

前言

由于买的这个阿里云ECS是最低配的(2核1G内存),小落同学的后台进程经常会被莫名奇妙的杀掉,因此拟给加个看门狗保护下。
整个保护分成两部分:
1)进程检测脚本:watchdog.sh
2)将检测脚本加入crontab

具体步骤如下。

进程检测脚本:watchdog.sh

利用一个配置文件,将小落同学绑定的端口及进程启动脚本在配置文件里配置好。然后再用一个脚本去telnet这个端口,若telnet成功,说明进程还活着,否则就是进程没了,需调用启动脚本进行启动。

配置文件

小落同学总共有两个进程,分别是backend和frontend,各使用8000端口和3000端口。
文件名:watchdog.list

8000 ./start_backend.sh localhost
3000 ./start_frontend.sh localhost

脚本内容

文件名:watchdog.sh

#!/bin/bash

Dir=`(cd $(dirname "$0");pwd)`
LogFile=$Dir/watchdog.log

while read port app ip
do
    echo "===============check $ip $port"
    echo -e '\x1dclose\x0d' |timeout --signal=9 5 telnet $ip $port >/dev/null 2>&1
    res=$?
    if [ "$res" != "0" ];then
        ShellDir=`dirname $app`
        echo "shell dir is $ShellDir"
        flag=`cat $ShellDir/watchdog_status.conf|awk -F"=" '{print $2}'`
        if [ "$flag" != "stoped" ];then
            echo "$port down,flag is : $flag,restart proces!! shell: $app" >>$LogFile
            echo "starting $app ..."
            /bin/sh $app >/dev/null 2>&1
            # source $app >/dev/null 2>&1
            echo "start $app" >$ShellDir/status.conf
        fi
    fi
    sleep 1
done < $Dir/watchdog.list

将检测脚本加入crontab

查看下当前cronjob列表。

查看命令

crontab -l

结果

7 18 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

加入小落同学相关的进程监控脚本

crontab -e编辑,并加入小落同学相关的进程监控脚本,并将其设置为每分钟都检测一下。

*  * * * * cd /root/xiaoluo && ./watchdog.sh

查看当前back-end进程情况

lsof -i:8000

返回8000端口进程情况

COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
python  26659 root   12u  IPv4 13798102      0t0  TCP localhost:irdmi (LISTEN)

手动杀进程,看看能不能恢复?

kill -9 26659

杀进程后,等一会儿再看看进程有没有重新启来?

while true; do lsof -i:8000; sleep 1; done

其它

查看crond的日志

crond的日志默认应该是在/var/log/cron里
若是进程没启动起来的话,可以看下crond的日志,看看可能是什么原因

grep -i cron /var/log/cron

项目运行环境切换

1)conda环境切换:由于我给小落同学后台项目专门搞了一个虚拟环境,手动启动的时候都是先手动conda activate xiaoluo来切换一个环境,然后再去执行启动小落同学,但这个在crontab里写起来比较麻烦,因此将相关的环境切换移到start_backend.sh,并在这个脚本里去启动小落同学后台。
2)npm环境切换:小落同学的前台其实也是类似,小落同学的前台的npm版本也是一个比较比较老的版本(v16.14.2),启动前需要nvm use v16.14.2切换一下npm版本,相关的处理都不放到crontab里,而转移到一个专门的启动脚本:start_frontend.sh。

Leave a comment

Your email address will not be published. Required fields are marked *