crontab的简单使用__watch超越crontab精度达到秒级的定时调度器

时间:2021-12-13 21:40:13

1、crontab的使用的简单使用:

        crontab是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动关闭这个服务: 

/sbin/service crond start //启动服务 //也可以用/ect/init.d/cron start
/sbin/service crond stop //关闭服务 
/sbin/service crond restart //重启服务 
/sbin/service crond reload //重新载入配置

注意,所有关于cron的操作,都要在root权限下进行,所以要sudo。

开机自动启动cron服务:

如何使系统启动时,就启动cron服务?

使用下面的方法:

在/etc/rc.d/rc.local这个脚本的末尾加上: 
/sbin/service crond start

cron服务启动以后,我们就可以使用cron服务了:

现在cron这个服务已经在进程里面了,我们就可以用这个服务了,cron服务提供以下几种接口供大家使用:

方法一、直接用crontab命令编辑(针对用户的) //要sudo的

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明: 
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 
crontab -l //列出某个用户cron服务的详细内容 
例如:crontab -u username -l
crontab -r //删除某个用户的cron服务 例如:crontab -u username -r 
crontab -e //编辑某个用户的cron服务 例如:crontab -u username -e

比如,root查看自己的cron设置: crontab -u root -l 
再例如,想删除fred的cron设置: crontab -u fred -r 
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e 
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

基本格式 :
*   *  *  *  *   command

分  时  日 月 周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

时间上除了数字,还有几个个特殊的符号就是"*"、"/"和"-"、",",

* 代表所有的取值范围内的所有数字,

*/ 代表每的意思, */5 表示 每5个单位, 例如,放在第一个位置上*/5就是每5分钟。

- 代表从某个数字到某个数字,

, 分开几个离散的数字。

特别注意:

具体格式要求如下: 
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。

即格式为:

时间 命令(包含完整路径)

*(分) *(时) *(天) *(月) *(星期)  命令完整路径(或可执行程序的完整路径)

请参看例子

以下举几个例子说明问题: 
早上6点 0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。 //单纯就是6点钟,所以分钟为0

每分钟 */1 * * * * ls /data >> /home/chenbaihu/test.xml

每两个小时 0 */2 * * * echo "Have a break now." >> /tmp/test.txt //每两小时的0分钟

晚上11点到早上8点之间每两个小时,早上八点

0 23-8/2,8 * * * echo "Have a good dream:" >> /tmp/test.txt

1月1日早上4点 0 4 1 1 * command line

注意:

        每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的只可以用crontab -u username -e 来编辑

cron启动后每过一分钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。 

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启lighttpd 。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启lighttpd 。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启lighttpd 。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启lighttpd 。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启lighttpd 。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启lighttpd

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启lighttpd

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启lighttpd

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启lighttpd

 

方法二、编辑/etc/crontab 文件配置cron(针对系统的任务)            //不做介绍,大家想看了,自己可以找找

 

2、如何使用watch实现秒级的定时任务调度:

      原文:http://user.qzone.qq.com/1780551083/blog/1326703236

     平时大家喜欢用crontab触发一些定时任务,毋庸置疑,crontab时间策略超级灵活,但也有一个最大的弊病,最高只能精确到分钟级。在一些实时性要求很高的场合中,这是远远满足不了需求的。


     其实大家忽略了linux中的另一个命令-watch,功能类似crontab,但是一般在前端运行,每次运行时都清屏,然后把程序结果显示在标准输出上面。因些想实现一个简单的定时监控器的话,最简单的就是用watch命令了,比如 watch 'ifconfig',在屏幕上每隔2秒刷新ifconfig命令运行结果,监控效果是非常之好。
     百闻不如一见,自己动手运行一下watch 'ifconfig',就知道出现神马效果了。      

crontab的简单使用__watch超越crontab精度达到秒级的定时调度器

    

     watch 还支持-n参数,用户可以指定时间间隔,默认是2秒钟一次,远远高于crontab的最高一分钟一次的精度。 
     由于watch设计的初衷主要是用来实现屏幕监控,和crontab定时后台调度有点不一样,其实人的智慧是无穷的,我们稍微改造一下,即可得到一高精度版的crontab定时调度器。
     很简单,创建一个crontaben.sh,内容如下
     nohup watch 'date >/tmp/date.tmp' >/dev/null &
     在命令行上运行./crontaben.sh,关掉终端,
     再另外开一个终端,ps -ef|grep watch,是不是会发现有一个watch进程常驻?再去/tmp下观察date.tmp,是不是每2秒钟刷新一次?

    

crontab的简单使用__watch超越crontab精度达到秒级的定时调度器