zoukankan      html  css  js  c++  java
  • [Shell] swoole_timer_tick 与 crontab 实现定时任务和监控

    手动完成 "任务" 和 "监控" 主要有下面三步:

    1. mission_cron.php(定时自动任务脚本):

    复制代码
    <?php
    /**
     * 自动任务 定时器 (5s 执行).
     *
     * swoole_timer_tick 解决秒级定时;
     * 如需调整,注意配置路径 和 mission_cron_monitor.
     *
     * Daemon Run:
     *  ./mission_cron_monitor
     *
     * Foreground Run:
     *  php mission_cron.php
     *
     * Stop:
     *  kill -9 PID
     *
     * @farwish.com
     */
    
    swoole_timer_tick(5000, function() {
        // 查询结果
        // 事务性更新
        // 记录日志
        // 输出结果
    }
    复制代码

    2. mission_cron_monitor (由 crontab 运行,监控上述脚本):

    复制代码
    #/bin/bash
    # 监控定时器,断掉重启.
    #
    # crontab used in /var/spoor/cron/
    # ( crontab -e )
    #
    # @farwish.com
    
    phpbin=/usr/local/php7/bin/php
    curdir=`dirname $0` 
    script=${curdir}/mission_cron.php
    process=`ps aux | grep -v grep | grep ${script}`
    
    if test -z "$process"; then
        nohup ${phpbin} ${script} > /dev/null 2>&1 &
    fi
    复制代码

    这里 curdir 没有使用 `pwd`,原因在于 pwd 获取的是当前所在工作目录,非执行的脚本所在目录,你可以通过 man 获得详细解释。

      pwd - print name of current/working directory

      dirname - strip last component from file name

    nohup的作用在于不受终端挂断影响,配合 & 后台运行,完美实现了 daemon.

    3. 设置用户级 cron 脚本.

    # 用户级运行cron.
    # 分 时 日 月 周 命令
    # @farwish.com
    
    # 每分钟执行
    */1 * * * * /home/www/project/mission_cron_monitor

    完成以上三步,主要工作就完了,可以运行查看效果了;

    重申:mission_cron.php 任务不一定要包在 swoole_timer_tick 回调函数内,仅在执行 秒/毫秒 定时需要。

    脚本虽然简单,但是有一些问题需要当心,如下:

    1. 排错:任务有没有执行通过看日志 /var/log/cron 是否有执行记录,

         有执行的话就是脚本问题,语法错误或者其它。注意,脚本中一律使用绝对路径。

    2. 级别:系统级任务   /ect/crontab

         用户级任务   直接用 crontab -e 编辑(存放位置 /var/spoor/cron/weichen)

         程序级任务   swoole_timer_tick(1000, function() {});

    3. 选项:crontab -e 

         crontab -l   # 当前用户拥有的 cron

         crontab -r   # 删除当前用户的 cron

         crontab -ri  # 删除前先询问

      更多 crontab -h

  • 相关阅读:
    iOS uitableView响应事件被拦截
    《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)
    Codeforces 475B Strongly Connected City 强连通裸题
    hdu1501&amp;&amp;poj2192 Zipper(DFS)
    hdu 4031 Attack(树状数组区间更新单点求值&amp;暴力)
    Bash Shell 流程控制 —— select
    Longest Valid Parentheses
    HDU 2955 Robberies
    浅谈 Objective-C Associated Objects
    浅谈 Objective-C Associated Objects
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8707599.html
Copyright © 2011-2022 走看看