zoukankan      html  css  js  c++  java
  • Linux crontab

    /etc:

    这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本, 在系统启动时,这些脚本会开启每个系统服务。这个目录中的任何文件应该是可读的文本文件。

    有趣的文件:虽然/etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件:

    • /etc/crontab, 定义自动运行的任务。
    • /etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。
    • /etc/passwd,包含用户帐号列表。

    /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

     */1 * * * * root /scripts/xxxx.sh start

    0 */2 * * * root echo > /var/log/rinetd.log

    安装crontab:

    yum install crontabs

    服务操作说明:

    /sbin/service crond start //启动服务

    /sbin/service crond stop //关闭服务

    /sbin/service crond restart //重启服务

    /sbin/service crond reload //重新载入配置

    /sbin/service crond status //启动服务


    查看crontab服务是否已设置为开机启动,执行命令:

    ntsysv

    加入开机自动启动:

    chkconfig –level 35 crond on

    注意(第一位为 * 的话得注意):

     * */1 * * *  =  */1 * * * *  =  * * * * * (每秒钟执行一次)

    用检测算法验证一下:

    <?php
    var_dump(_isTimeByCron(time(),'* */1 * * * *'));
    
    function _isTimeByCron($time, $cron)
        {
            $cronParts = explode(' ', $cron);
            if (count($cronParts) != 6) {
                return false;
            }
    
            list($sec, $min, $hour, $day, $mon, $week) = $cronParts;
    
            $checks = array('sec' => 's', 'min' => 'i', 'hour' => 'G', 'day' => 'j', 'mon' => 'n', 'week' => 'w');
    
            $ranges = array(
                'sec' => '0-59',
                'min' => '0-59',
                'hour' => '0-23',
                'day' => '1-31',
                'mon' => '1-12',
                'week' => '0-6',
            );
    
            foreach ($checks as $part => $c) {
                $val = $$part;
                $values = array();
    
                /*
                    For patters like 0-23/2
                */
                if (strpos($val, '/') !== false) {
                    //Get the range and step
                    list($range, $steps) = explode('/', $val);
    
                    //Now get the start and stop
                    if ($range == '*') {
                        $range = $ranges[$part];
                    }
                    list($start, $stop) = explode('-', $range);
    
                    for ($i = $start; $i <= $stop; $i = $i + $steps) {
                        $values[] = $i;
                    }
                } /*
                    For patters like :
                    2
                    2,5,8
                    2-23
                */
                else {
                    $k = explode(',', $val);
    
                    foreach ($k as $v) {
                        if (strpos($v, '-') !== false) {
                            list($start, $stop) = explode('-', $v);
    
                            for ($i = $start; $i <= $stop; $i++) {
                                $values[] = $i;
                            }
                        } else {
                            $values[] = $v;
                        }
                    }
                }
    
                if (!in_array(date($c, $time), $values) and (strval($val) != '*')) {
                    return false;
                }
                print_r($values);
            }
    
            return true;
        }
    
    ?>

    输出:

    Array
    (
        [0] => *
    )
    Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
        [3] => 3
        [4] => 4
        [5] => 5
        [6] => 6
        [7] => 7
        [8] => 8
        [9] => 9
        [10] => 10
        [11] => 11
        [12] => 12
        [13] => 13
        [14] => 14
        [15] => 15
        [16] => 16
        [17] => 17
        [18] => 18
        [19] => 19
        [20] => 20
        [21] => 21
        [22] => 22
        [23] => 23
        [24] => 24
        [25] => 25
        [26] => 26
        [27] => 27
        [28] => 28
        [29] => 29
        [30] => 30
        [31] => 31
        [32] => 32
        [33] => 33
        [34] => 34
        [35] => 35
        [36] => 36
        [37] => 37
        [38] => 38
        [39] => 39
        [40] => 40
        [41] => 41
        [42] => 42
        [43] => 43
        [44] => 44
        [45] => 45
        [46] => 46
        [47] => 47
        [48] => 48
        [49] => 49
        [50] => 50
        [51] => 51
        [52] => 52
        [53] => 53
        [54] => 54
        [55] => 55
        [56] => 56
        [57] => 57
        [58] => 58
        [59] => 59
    )
    Array
    (
        [0] => *
    )
    Array
    (
        [0] => *
    )
    Array
    (
        [0] => *
    )
    Array
    (
        [0] => *
    )
    bool(true)

    可以看到,秒的位置被解析成 * ,分钟的取值范围是 0-59,这就意味着每秒执行一次

  • 相关阅读:
    Jquery Plugin模版
    jquery之extend
    java反射技术实例
    java基础汇总
    Java学习路线
    java的一个爬虫
    Java深度理解——Java字节代码的操纵
    java编程思想-基础
    hdu 5201 The Monkey King【容斥原理+组合数学】
    容斥原理
  • 原文地址:https://www.cnblogs.com/lyc94620/p/10001024.html
Copyright © 2011-2022 走看看