1、crontab的使用的简单使用:
/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',就知道出现神马效果了。
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秒钟刷新一次?