zoukankan      html  css  js  c++  java
  • 无root权限crontab间接实现守护进程

    诉求

    在服务器上跑了一个服务,需要24小时不间断运行。
    如果你是root或所在用户已加入sudoer那么参考Linux添加自启动daemon service
    若所在用户没有root权限无法向系统写入service实现daemon接着往下看

    分析

    普通用户仍然具有创建计划任务的权限
    可以通过crontab设置每分钟运行脚本检查进程是否存活

    实现

    首先创建守护脚本

    $ vi ~/crash_monitor.sh
    
    #!/bin/bash
    if test $(pgrep gogs|wc -l) -eq 0
    then
    nohup /home/git/gogs/gogs web > /dev/null 2>&1 &
    fi
    
    # 保存退出并赋予执行权限
    $ chmod +x ~/crash_monitor.sh
    

    上述脚本将检查是否存在gogs进程,不存在则后台执行gogs
    有关nohup可以参考之前的文章同为后台运行screen, nohup和start-stop-daemon到底有什么区别?
    接着添加crontab计划任务

    $ crontab -e
    
    # 末尾加入以下内容
    * * * * * /home/git/crash_monitor.sh
    

    上述配置代表每分钟执行一次

    拓展

    crontab语法详解,前五位分别为时间参数

    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    +----- 星期中星期几 (0 - 7) (星期天为0或7)
    |    |    |    +---------- 月份 (1 - 12) 
    |    |    +--------------- 一个月中的第几天 (1 - 31)
    |    +-------------------- 小时 (0 - 23)
    +------------------------- 分钟 (0 - 59)
    

    第六位至行尾均视为命令,举例:

    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # m h dom mon dow command
    0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    

    综上crontab支持的最高任务频率为每分钟一次
    当然也可以通过奇技淫巧实现更高频率,例如:

    # Run your command every 10sec
    * * * * * /home/you/task.sh
    * * * * * sleep 10;/home/you/task.sh
    * * * * * sleep 20;/home/you/task.sh
    * * * * * sleep 30;/home/you/task.sh
    * * * * * sleep 40;/home/you/task.sh
    * * * * * sleep 50;/home/you/task.sh
    

    注:生产环境不建议这么做,老老实实用daemon service配置重启间隔吧。

    参考

    unix - How can I schedule a cron job that runs every 10 seconds in linux? - Server Fault

  • 相关阅读:
    软工实践个人总结
    第05组 每周小结 (3/3)
    第05组 每周小结 (2/3)
    第05组 每周小结 (1/3)
    第05组 Beta冲刺 总结
    第05组 Beta冲刺 (5/5)
    第05组 Beta冲刺 (4/5)
    第六次作业
    第05组 Beta冲刺 (3/5)
    第05组 Beta冲刺 (2/5)
  • 原文地址:https://www.cnblogs.com/azureology/p/14308087.html
Copyright © 2011-2022 走看看