linux定时任务crontab和watchdog.sh脚本做软件看门狗

linux定时任务crontabwatchdog.sh脚本做软件看门狗

1.        简介

看门狗的作用是定期检测服务正常运行,如果发现服务不在了,会重新拉起服务;linux中可以利用系统的定时任务功能crontab定期的去执行watchdog.sh脚本,而watchdog.sh脚本中则是通过查看服务的状态,在查找结果字符串中用grep命令去检索是否有running字符串,来判断服务是否正在运行;如果没有,则拉起服务;实现看门狗的功能;

2.        crontab命令选项

     -u指定一个用户

     -l列出某个用户的任务计划

     -r删除某个用户的任务

     -e编辑某个用户的任务,相当于打开了/etc/crontab 文件,可以在里面添加任务;

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 

crontab -l //列出某个用户cron服务的详细内容

crontab -r //删除没个用户的cron服务

crontab -e //编辑某个用户的cron服务

比如说root查看自己的cron设置:crontab -u root -l

再例如,root想删除fred的cron设置:crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

3.        定时任务的格式

每一行代表一个定时任务,每一个定时任务前面有5个参数,参数的含义和范围如下,5个参数构成定时任务的循环周期;command是要执行的定时任务,例如执行看门狗脚本任务 sh watchdog.sh。定时任务的格式如下:

分     小时    日       月       星期     命令

0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)

记住几个特殊符号的含义:

(1)“*”代表取值范围内的数字,

(2)“/”代表”每”,

(3)“-”代表从某个数字到某个数字,

(4)“,”分开几个离散的数字

定时任务实例:

(1)30     3     10,20     *     *     ls     每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

(2)25     8-11 *           *     *     ls       每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

(3)*/15   *       *           *     *     ls         每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

(4)30   6     */10         *     *     ls       每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

(5)50   7       *             *     *     root     run-parts     /etc/cron.daily  每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件  [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。

4.        用shell脚本添加定时任务

下面是一个添加定时任务的shell脚本,表示每十秒执行一次服务检测,如果服务停止了,则调用命名启动服务;

 

#! /bin/sh

#创建文件 2表示控制台的错误信息,/dev/null表示垃圾黑洞,相当于垃圾箱,2> /dev/null则表示将错误信息丢弃,不显示;将显示的数据;

mkdir -p /home/apps/components/ 2>/dev/null

#复制通目录下的watchdog.sh 到文件夹下

cp ./watchdog.sh /home/apps/components/

 

#创建定时任务变量

CRONTAB_CMD="* * * * * sh /home/apps/components/watchdog.sh

* * * * * sleep 10;sh /home/apps/components/watchdog.sh

* * * * * sleep 20;sh /home/apps/components/watchdog.sh

* * * * * sleep 30;sh /home/apps/components/watchdog.sh

* * * * * sleep 40;sh /home/apps/components/watchdog.sh

* * * * * sleep 50;sh /home/apps/components/watchdog.sh"

 

#crontab -l(列出所有的定时任务),2>/dev/null(错误信息丢掉),grep -Fv /home/apps/components/watchdog.sh过滤掉含有/home/apps/components/watchdog.sh的行,"$CRONTAB_CMD"将变量的值输出到控制台,和之前过滤后的数据整合到到一起,过滤的作用是避免重复;crontab -是将数据吸入crontab文件中;命令中的|是管道的意思,是将前一条命令中的数据输入到后一条命令;

(crontab -l 2>/dev/null | grep -Fv /home/apps/components/watchdog.sh; echo "$CRONTAB_CMD") | crontab -

5.       watchdog.sh脚本文件内容

#!/bin/bash

#获取时间

now=`date '+%Y-%m-%d %H:%M:%S'`

baseDir=$(cd `dirname $0`; pwd)

#定义sleep的时间为1秒

sleepTime=1

#建立要维护的服务数组,数组内是服务的名称;

array=("delete" "dffkjafk" )

#输出时间

echo $now

#for循环数组中的服务名称

for pname in ${array[@]}   

do  

if [[ ! -z $pname ]]; then     

#每个服务在系统路径/etc/init.d下都会有个执行脚本文件,以服务的名称命名,通过status命令来查看状态,然后将查询的星星进行过滤找出有running的行,过滤掉grep的信息,wc -l是计算行数;如果有一行,说明正在运行;

    ret=`/etc/init.d/$pname status | grep "running" | grep -v grep | wc -l`    

   if [ $ret -eq 0 ]; then   

       echo "$pname process not exists ,restart process now... "  

#如果没有,则表示服务挂了,要重新启动

     /etc/init.d/$pname restart   

    echo "$pname restart done ....."   

    else       

   echo "$pname process exists , sleep $sleepTime seconds "   

    fi    

   sleep $sleepTime

     else 

     echo 126

   fi done;

 

 

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

https://www.cnblogs.com/bclshuai/p/11380657.html

百度云盘下载地址:

链接:https://pan.baidu.com/s/1swkQzCIKI3g3ObcebgpIDg

提取码:mc8l

微信公众号获取最新的软件和视频介绍

QStockView

posted @   一字千金  阅读(1385)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示