我们在c语言开发的过程中总会或多或少的遇到一些定时的任务,比如每分钟检测一下某个状态,每30s上报一次心跳等等。比如我们51单片机的时候就会用手写延时函数来做,这种会阻塞。高级一点的会用定时器中断。然后c语言也会有定时器,这都是一些方法。今天来讲一下linux的定时任务 crontab
首先我们在我们的终端上敲一下看看
linux-xv9p:~/lyx_test/crontab # crontab -h
crontab: invalid option -- 'h'
crontab: usage error: unrecognized option
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
crontab -n [ hostname ]
crontab -c
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
-n (set host in cluster to run users' crontabs)
-c (get host in cluster to run users' crontabs)
-s (selinux context)
linux-xv9p:~/lyx_test/crontab #
哇塞 -h或者–help都不认,太高冷了吧。先不管,看介绍,-e 编辑,-l list,-r delete,最简单的用法已经够了。先-l看下吧。
啥也没有,因为没有默认的定时任务。那我们手动用-e创建一个,那就要讲到-e的语法规则了。-e 在linux终端窗口下是使用vi或者vim编辑的,都可以,问题不大。其编辑的格式如下:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
以上的时间格式可以简化成一下的写法:
min hour day month weekday program
其最大的精度只能精确到分钟,所以那些秒级甚至毫秒级的定时器就老老实实的采用传统的定时器吧。说回来,这个每个*号代表一个时间,二者之间用空格隔开,那具体怎么写呢?
可以固定一个数字,如在分钟的位置固定为1,其表示的意思就是每个小时的1分钟这个时间点,如果是范围怎么表示,用中划线来表示:1-10就是没个小时的第1分钟到10分钟之间的时间。如果想表示每隔多久就用 / 符号表示,如 在分钟的位置上写上 /3 表示每隔3分钟。那我们来写一个具体的例子:
每年的1月到3月的1号到10号每隔两天,在这两天的第1个小时0分钟执行某个动作:0 1 1-10/2 1-3 * xxx
xxx表示我们要执行的动作。
有了以上的语法规则,那我们来实际操作一番。写个最简单的任务,每整数的分钟往我当前目录下的一个文件追加当前的日期:
linux-xv9p:~/lyx_test/crontab # pwd
/share+/SUSE_1/lyx_test/crontab
linux-xv9p:~/lyx_test/crontab #
那么我们来编辑一下:
就最大的精度,每分钟把当前日期重定向到文件里。编辑完就有显示了,-l看一下,就有了刚才添加的这一条。
我就等了两分钟,去看一下这个路径下的test.txt文件:
是不是在每个整点分钟的第一秒就会有我们的操作重定向到文件中。同样我们可以在这个应用中执行一些我们自己写的脚本等等很酷的东西,看自己发挥。
那么有个疑问,这个东西我添加之后,系统重启了,这个定时任务还存在么。我们试一下,什么都不操作,直接重启系统,起来之后发现是还在的。如果不在的话,我们要怎么设置呢?
使用chkconfig
去看下我们的启动任务,
cron是打开的。
我们打开关闭都看一下,看看有什么内容:
就是链接了一些文件,我们把他关掉,再重启看看这个任务还有没有
chkconfig cron off
重启还在,看来这个东西不是我们要的,后面再研究吧,不想要了其实-r删除掉就好了。
crontab -r
这个指令是全部删除,如果想删除某一条,可以-e进去编辑删除。
谨慎使用-r参数,建议备份自己的crontab文件,其位置为
/var/spool/cron/<username>
以上就是linux定时任务的简单使用了。如有错误欢迎指出,共同进步。
转载请注明出处,码字不易,欢迎点赞交流