欢迎大家扫码关注我的微信公众号:
Linux 之 定时任务调度
一、概念
任务调度: 是指系统在某个时间执行的特定的命令或程序;
在 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
文件内均会追加一次当前时间;