Linux crontab
Posted 凌雨尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,这就意味着每秒执行一次
以上是关于Linux crontab的主要内容,如果未能解决你的问题,请参考以下文章
crontab Linux下 crontab 命令的用法:sudo crontab -?
Linux crontab定时器设置(定期执行java程序)(转)
linux centos8 nologin用户执行crontab命令
XTOOLS Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab