【Linux】Linux定时任务crond

时间:2022-04-11 01:24:17

作业规划进程crond是Linux下用来定期执行命令或指定程序任务的一种服务或软件。运行linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)。linux系统中定时任务调度的工作可以分为以下两个情况:
1. linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等。
2. 用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务器进行时间同步,每天晚上0点备份站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。

设置定时任务命令是:crontab,它的用法参数如下:
用法:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

参数 意义
-l 查看当前用户的定时任务
-e 编辑当前用户的定时任务
-r 删除定时任务
-i 删除crontab文件内容,删前会有提示
-u 删指定使用用户执行任务

语法格式中特殊符号的含义:

符号 意义
* 号表示任意时间都,就是“每”的意思,举例:如00 01 * * ls表示每月每周每日的凌晨1点执行ls任务
- 减号,表示分隔符,表示一个时间范围段。00 17-19 * * * ls。就是17,18,19点整点分别执行的意思。
, 逗号,表示分隔时间段的意思。30 17,18,19 * * * ls 表示每天17,18,19点的半点执行ls。也可以和“-”结合使用,如: 30 3-5,17-19 * * * ls。
/n n代表数字,即”每隔n单位时间”,例如:每10分钟执行一次任务可以写 /10 * * * ls,其中 /10,的范围是0-59,也可以写成0-59/10。

用一下这个命令看看。
1. 使用crontab -e 编辑好定时任务。我让每隔一分钟向test.c文件里打印hello。命令如下:

*/1 * * * * echo hello >> /home/liuqing/test.txt

2.保存退出后开始执行,查看test.c文件是否每隔一分钟就写入一个hello。
【Linux】Linux定时任务crond
说明命令执行成功了。
再试一下每分钟执行一次ls命令。我们下意识的就会把crontab打开的文件写成下面这个样子:

*/1 * * * * ls

然后运行后发现,虽然crontab -l 显示正在运行该任务,但是屏幕中并不会运行ls命令。是因为我们没有把运行结果指定显示到终端上,可是默认不就是应该到当前终端吗?我们知道,一个终端只能运行一个前台作业,多个后台作业,当前前台运行的是shell,所以如果不指定输出到终端,那么这个定时任务是不能占用前台的。所以,命令应该如下:

*/1 * * * * ls >> /dev/pts/0

为什么是重定向到/dev/pts/0呢?终端也是一个文件,使用who am i命令可查看当前终端文件。
【Linux】Linux定时任务crond
这样就达到了一分钟执行一次ls的效果。如果你也只是测试crontab而已,记得最后要执行crontab -r ,要不然你的Linux会一直在跑这个进程,耗费资源。