zoukankan      html  css  js  c++  java
  • Linux监控服务并主动重启

    Linux查询后台进程,如果没有进程号,则重启服务:

    #!/bin/sh
    basepath=$(cd `dirname $0`; pwd)
    while true
    do
        procnum=`ps -ef|grep "服务名称"|grep -v grep|wc -l`
        if [ $procnum -eq 0 ]
        then
            #启动命令
            echo `date +%Y-%m-%d` `date +%H:%M:%S`  "restart 服务" >>$basepath/shell.log
        fi
        sleep 1
    done

     结合  crontab命令
    对于24小时开机运行的服务器可能用不到的,但是对非24小时开机,又想定时运行任务的机器还是十分有用的。

    crontab [-u user] [-l | -r | -e] [-i]
    -l:列出当前用户的计划任务。
    -e:编辑当前用户的计划任务。
    -r:删除当前用户的所有计划任务。即删除/var/spool/cron/USERNAME文件。
    -u:管理指定用户的计划任务,仅root有权限。
    -i:在使用-r选项删除所有任务时提示用户确认。

    crontab的语法

    crontab分为两类:
    1、系统cron任务
    系统的crontab存放在 /etc/crontab

    # vim /etc/crontab
    
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # 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


    a、每一行定义一个周期性任务,共7个字段。
    b、此处的环境变量不同于用户登录后获得的环境,因此建议命令使用绝对路径。
    c、执行结果会发送邮件给mailto指定的用户。

    2、用户cron任务
    用户的crontab文件存放在 /var/spool/cron/USERNAME
    # crontab -e -u USERNAME

    a、每一行定义一个周期性任务,共6个字段。
    b、此处的环境变量不同于用户登录后获得的环境,因此建议命令使用绝对路径。
    c、执行结果会发送邮件给当前用户。
    星号(*)匹配所有有效的值。
    短横线(-)表示范围连续取值。
    逗号(,)表示离散取值。
    正斜线(/)指定间隔频率。例如,0-59/2 在分钟字段表示每两分钟。
     
    指定的时间点不能被步长整除时,其意义将不存在。例如 */7 * * * *

    注意:%在crontab中被认为是newline,使用时需要用 转义。比如crontab文件中,如果有 "date +%Y%m%d",必须替换为:"date +\%Y\%m\%d"。
    crontab的最小时间单位为”分钟“,想完成”秒“级任务

    分钟    小时       几号       月份     星期几
    */5      *          *         *        *              每5分钟执行一次
    3        *          *         *        *              每小时的第3分钟执行一次
    3        4          *         *        5              每周5的4点3分执行一次
    5        6          7         *        *              每月的7号的6点5分执行一次
    7        8          9         10       *              每年的10月9号8点7分执行一次
    9        8          *         *        3,7            每周3和周日的8点9分
    0        8,20       *         *        3,7            每周3和周日的8点和20点执行一次
    0        9-18       *         *        1-5            周一到周五的9-18点,即工作时间内的每小时
    0        7          25        12       *              每年的12月25号7点执行一次

    查看所有用户的crontab
    # for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done  
    查看cron的日志
    # tail -50f /var/log/cron

  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/hello-wei/p/9512361.html
Copyright © 2011-2022 走看看