Linux 之 定时任务 crond

欢迎大家扫码关注我的微信公众号:
数据之恋

一、概念

任务调度: 是指系统在某个时间执行的特定的命令或程序;
在 Linux 系统中, 有一个内置的可以进行定时任务调度的功能 —— crond。

二、分类

任务调度的分类:
1. 系统工作, 有些重要的工作必须周而复始的执行, 如病毒扫描等;
2. 个别用户工作, 个别用户可能希望执行某些程序, 比如对 mysql 数据库的备份;

三、相关命令

crontab -e 编辑 crontab 定时任务
crontab -l 显示 crontab 任务
crontab -r 删除当前用户【所有的】 crontab 任务
service crond restart 重启 crontab 服务

如果只是简单的任务, 可以不用写脚本, 可以直接在 crontab 中加入任务即可; 对于比较复杂的任务, 可以使用 shell 脚本进行操作;

四、 一个例子

设置个人任务调度, 执行 crontab -e 然后回车后进行编辑(类似于 vi 编辑页面), 输入:

*/1 * * * * ls -l /etc/ >> /tmp/to.txt

即每小时的每分钟执行 ls -l /etc/ >> /tmp/to.txt 命令; 创建成功后保存退出, 如下所示:

[root@hadoop01 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

【注意】五个占位符 * 之间, 需要有一个空格, 否则将创建失败;

五、 关于占位符的说明

表达式中的 * 即为占位符, 关于这 5 个占位符说明如下:

			项目			含义						范围
			第一个 * 		一小时当中的第几分钟		0~59
			第二个 *		一天当中的第几小时			0~23
			第三个 * 		一个月当中的第几天			1~31
			第四个 * 		一年当中的第几个月			1~12
			第五个 * 		一周当中的星期几			0~7(0 和 7都代表星期日)

特别的:
① */1 表示每隔多长时间执行一次, 如果是在分钟的位置上, 那么表示将每隔 1 分钟执行一次;
② 逗号分隔的表示不连续的时间, 如 0 8,12,16 * * *就代表每天的 8:00 12:00 16:00 都执行一次命令;
③ * 表示任何时间, 如果在分钟位置上, 则表示一小时内的每分钟都执行一次;
④ - 表示连续的时间范围, 比如 0 5 * * 1-6即表示周一到周六每天的 5:00 都会执行一次命令;

六、一个案例

6.1 需求

每隔 1 分钟, 就将当前的日期信息追加到 /tmp/mydate 文件中;

6.2 步骤

6.2.1 编写一个 shell 脚本 /home/mytask1.sh, 内容如下:

date >> /tmp/mydate

6.2.2 给 mytask1.sh 一个可执行权限(至少需要给执行者一个可执行权限, 否则该定时任务将失败);

chmod u+x /home/mytask1.sh

6.2.3 crontab -e, 回车后编辑如下语句并保存退出:

*/1 * * * * /home/mytask1.sh

此时系统会提示:

[root@hadoop01 home]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

见到 crontab: installing new crontab字样, 即表示此定时任务已经创建完成; 也可以使用 crontab -l进行查看;
待到每个整数的分钟, /tmp/mydate文件内均会追加一次当前时间;


版权声明:本文为cybeyond_xuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。