|
@@ -1,44 +1,62 @@
|
|
#!/bin/bash
|
|
#!/bin/bash
|
|
|
|
|
|
-function check_time() {
|
|
|
|
- time_subroutine=$(getconf CLK_TCK)
|
|
|
|
- start_time=$(awk '{print $22}' /proc/$1/stat)
|
|
|
|
- sys_uptime=$(awk '{print $1}' /proc/uptime)
|
|
|
|
- pid_uptime=$((${sys_uptime%.*} - ${start_time} / ${time_subroutine}))
|
|
|
|
- echo ${pid_uptime}
|
|
|
|
- if [ ${pid_uptime} -ge 180 ]; then
|
|
|
|
- kill -9 $1
|
|
|
|
- fi
|
|
|
|
-}
|
|
|
|
|
|
+function check() {
|
|
|
|
+ local system_clock_frequency
|
|
|
|
+ system_clock_frequency="$(getconf CLK_TCK)"
|
|
|
|
|
|
-# 切换目录,在此目录下执行
|
|
|
|
-cd /mnt
|
|
|
|
|
|
+ local start_time # 进程开始时间
|
|
|
|
+ start_time="$(awk '{print $22}' /proc/$1/stat)"
|
|
|
|
|
|
|
|
+ local system_uptime # 系统的运行时间
|
|
|
|
+ system_uptime="$(awk '{printf "%d", $1}' /proc/uptime)"
|
|
|
|
|
|
-for pid in $(ps -ef | grep -v grep | grep detail | awk '{print $2}'); do
|
|
|
|
- echo $pid
|
|
|
|
- check_time $pid
|
|
|
|
- echo "关闭中国招标投标公共服务平台快照页爬虫"
|
|
|
|
-done
|
|
|
|
|
|
+ local running_time # 进程运行时长
|
|
|
|
+ running_time="$(( (system_uptime - start_time / system_clock_frequency) ))"
|
|
|
|
|
|
|
|
+ echo "检查结果 pid:$1 进程:$2 运行时长:${running_time}s"
|
|
|
|
+ if [ ${running_time} -ge 180 ]; then
|
|
|
|
+ # 尝试发送终止信号,让进程自行处理退出操作
|
|
|
|
+ kill -9 "$1"
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
|
|
-echo "开始关闭自动化服务进程"
|
|
|
|
-for pid in $(ps -ef | grep -v grep | grep geckodriver | awk '{print $2}'); do
|
|
|
|
- echo $pid
|
|
|
|
- check_time $pid
|
|
|
|
- echo "关闭驱动"
|
|
|
|
-done
|
|
|
|
-
|
|
|
|
-for pid in $(ps -ef | grep -v grep | grep firefox | awk '{print $2}'); do
|
|
|
|
- echo $pid
|
|
|
|
- check_time $pid
|
|
|
|
- echo "关闭浏览器"
|
|
|
|
-done
|
|
|
|
|
|
+function restart() {
|
|
|
|
+ rm -rf /tmp/*
|
|
|
|
+ echo "重启采集服务..."
|
|
|
|
+ sleep 10
|
|
|
|
+ flock -xn /mnt/detail_normol.py -c 'nohup python3 detail_normol.py >/dev/null &'
|
|
|
|
+ sleep 5
|
|
|
|
+ flock -xn /mnt/detail_firefox.py -c 'nohup python3 detail_firefox.py >/dev/null &'
|
|
|
|
+}
|
|
|
|
|
|
-echo "rest启动服务"
|
|
|
|
-rm -rf /tmp/*
|
|
|
|
|
|
+function start() {
|
|
|
|
+ echo "中国招标投标公共服务平台 - 采集服务状态检查"
|
|
|
|
+
|
|
|
|
+ # 应用服务列表([索引]=用途:进程服务名)
|
|
|
|
+ appList=(
|
|
|
|
+ [0]="script:detail_firefox.py"
|
|
|
|
+ [1]="script:detail_normol.py"
|
|
|
|
+ [2]="driver:geckodriver"
|
|
|
|
+ [3]="browser:/usr/bin/firefox"
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ for elem in "${appList[@]}"; do
|
|
|
|
+ # IFS=":" IFS按照":"分割 应用类型(app_type)和进程名(app_name)
|
|
|
|
+ IFS=":" read -r app_type app_name <<< "$elem"
|
|
|
|
+ # 使用进程名查询进程pid
|
|
|
|
+ pids=$(pgrep -f "$app_name")
|
|
|
|
+ for pid in $pids; do
|
|
|
|
+ echo "开始检查 pid:$pid 进程:$app_name 所属类型:$app_type"
|
|
|
|
+ check "$pid" "$app_name"
|
|
|
|
+ done
|
|
|
|
+ done
|
|
|
|
+
|
|
|
|
+ restart
|
|
|
|
+
|
|
|
|
+ sleep 3
|
|
|
|
+ echo "关闭僵死进程..."
|
|
|
|
+ ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
|
|
|
|
+}
|
|
|
|
|
|
-sleep 10
|
|
|
|
-flock -xn /mnt/detail_normol.py -c 'nohup python3 detail_normol.py >/dev/null &'
|
|
|
|
-sleep 5
|
|
|
|
-flock -xn /mnt/detail_firefox.py -c 'nohup python3 detail_firefox.py >/dev/null &'
|
|
|
|
|
|
+cd /mnt || exit 1
|
|
|
|
+start
|