Linux CentOS 8定时任务脚本crond.sh,检测状态,自动重启脚本sh

Posted 架构师易筋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux CentOS 8定时任务脚本crond.sh,检测状态,自动重启脚本sh相关的知识,希望对你有一定的参考价值。

1. 原因:进程被kill掉

不少人反应 ss 在使用一段时间后,其进程会消失。
其实这种情况大多数是被系统给 kill 了。

此命令可查看正在运行的 ss 服务的进程ID,进程名叫 ss-server

netstat -lptn

关闭 ss 服务,xxxx 请改用你上面命令查到的进程id

kill -9 xxxx

诚然一部分是 VPS 的原因,一部分是 ss 的原因。比如内存过小,比如多端口使用一段时间后内存占用过大,导致内存不足等等。
鉴于此,写了一个 ss 进程检查脚本,一旦发现进程不存在便会重新启动。

2. 编写脚本 ss-crond.sh

#!/usr/bin/env bash
#=================================================================#
#   System Required:  CentOS, Debian, Ubuntu                      #
#   Description: Check ss Server is running or not       #
#   Author: 架构师易筋 <zgpeace@gmail.com>                             #
#   Visit: https://blog.csdn.net/zgpeace                         #
#=================================================================#
path=/var/log
[[ ! -d ${path} ]] && mkdir -p ${path}
log=${path}/ss-crond.log

pid=""
ss_status=$(service ss-libev-server@config status)
if [ $? -eq 0 ]; then
    pid=$(echo "$ss_status" | sed -e 's/[^0-9]*//g')
fi

if [ -z "${pid}" ]; then
    echo "$(date +'%Y-%m-%d %H:%M:%S') ss-libev is not running" >> ${log}
    echo "$(date +'%Y-%m-%d %H:%M:%S') Starting ss-libev" >> ${log}
    $(service ss-libev-server@config start) &>/dev/null
    if [ $? -eq 0 ]; then
        echo "$(date +'%Y-%m-%d %H:%M:%S') ss-libev start success" >> ${log}
    else
        echo "$(date +'%Y-%m-%d %H:%M:%S') ss-libev start failed" >> ${log}
    fi
else
    echo "$(date +'%Y-%m-%d %H:%M:%S') ss-libev is running with pid $pid" >> ${log}
fi

此时便将脚本 ss-crond.sh 下载回来并赋予执行权限了。

chmod +x ss-crond.sh

3. 将此脚本扔到 Linux 的定时任务 cron 里就搞定了

cron 是一个 Linux 下的定时执行工具,可以在无需人工干预的情况下运行作业。由于 Cron 是 Linux 的内置服务,多数情况下它不是自动启动的,可以用以下的方法启动、关闭这个服务。

/etc/init.d/crond start //启动服务
/etc/init.d/crond stop //关闭服务
/etc/init.d/crond restart //重启服务
/etc/init.d/crond reload //重新载入配置

// 或者
crond start //启动服务
crond stop //关闭服务
crond restart //重启服务
crond reload //重新载入配置

编辑 /etc/crontab 文件配置 cron

vim /etc/crontab

默认的是以下这样的:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

只需在最后追加如下一行:

*/5 * * * * root bash /root/ss-crond.sh

然后保存退出。
以上表示每 5 分钟,root 用户执行一下脚本 /root/ss-crond.sh
注意脚本要写完整路径。
这样系统就会每 5 分钟检查一下 ss 进程是否存在了,如果不存在了会自动重新启动。

4. 脚本每次运行会写日志的,日志完整路径如下:

/var/log/ss-crond.log

没事可以去看看该日志文件,看看 ss 进程是不是真的经常性不存在,如果真是如此,恐怕就要排查一下深层原因了。

以上是关于Linux CentOS 8定时任务脚本crond.sh,检测状态,自动重启脚本sh的主要内容,如果未能解决你的问题,请参考以下文章

Linux之定时任务

linux定时任务

Linux Centos8上使用系统定时任务crond

Linux计划任务 定时任务 Crond 配置详解 crond计划任务调试 sh -x 详解 JAVA脚本环境变量定义

Linux crond定时任务

linux CentOS6.3 安装crond定时服务和设置定时任务