1. 计划任务基本概述

1.1 什么是crond

crond就是计划任务, 类似于我们平时生活中的闹钟, 定点执行.

1.2 为什么要使用crond

crond主要是做一些周期性的任务,
比如: 凌晨3点定时备份数据.
比如:11点开启网站抢购接口, 12点关闭网站抢购接口.

1.3 计划任务主要分为以下两种使用情况:

 1. 系统级别的定时任务:临时文件清理、系统信息采集、日志文件切割  2. 用户级别的定时任务:定时向互联网同步时间、定时备份系统配置文件、定时备份数据库的数据

2.计划任务时间管理

2.1 Crontab配置文件

Crontab配置文件记录了时间周期的含义
[root@kid ~]# vim /etc/crontab
# 执行命令的解释器
SHELL=/bin/bash
# 环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 邮件发给谁(将执行的结果以邮件的方式发生到指定有户的邮箱)
MAILTO=root
# Example of job definition:
# .---------------- minute (0 - 59) # 分钟
# |  .------------- hour (0 - 23)   # 小时
# |  |  .---------- day of month (1 - 31)   # 日期
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr # 月份
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat  # 星期
# |  |  |  |  |
#          user-name  command to be executed# * 表示任意的(分、时、日、月、周)时间都执行
# -  表示一个时间范围段, 如5-7点
# ,  表示分隔时段, 如6,0,4表示周六、日、四
# /n 表示每隔n单位时间, 如/10 每10分钟

2.2 时间编写规范

 * * * * *        user-name  command to be executed
-----------------------------------------------
# 每天的凌晨2点整执行 (日期, 月份, 星期为空)
00 02                     ls
# 每月的1日的凌晨2点整执行 (月份, 星期为空)
00 02 1                   ls
# 每年的2月14日凌晨2点执行 (星期为空)
00 02 14 2                ls
# 每周天的凌晨2点整执行  (日期, 月份为空)
00 02       7             ls
# 每年的6月周五凌晨2点执行  (日期为空)
00 02    6  5            ls
# 每月14日或每周日的凌晨2点都执行 (月份为空)
00 02 14    7            ls
# 每年的2月14日或每年2月的周天的凌晨2点执行
00 02 14 2 7             ls
# 每天凌晨2点, 每隔10分钟执行一次
/10  02                  ls
# 每分钟都执行  ls
# 每年2月14日的凌晨执行命令
00 00 14 2               ls
# 每隔5分钟执行一次
/5                       ls
# 每年的1月5月8月凌晨2点执行
00 02    1,5,8           ls
# 每月1号到8号凌晨2点执行
00 02 1-8                ls
# 每天晚上21:00执行
0 21                     ls
# 每月1、10、22日的4:45执行
45 4 1,10,22             ls
# 每月1到10日的4:45执行
45 4 1-10                ls
# 每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 /2             ls
# 晚上11点到早上7点之间, 每隔一小时执行
0 23-7/1                 ls
# 周一到周五每天晚上21:15执行
15 21      1-5           ls

2.3 crontab命令参数

crontab -e: 执行文字编辑器来设定时程表, 内定的文字编辑器是vi
参数 含义
-e 编辑定时任务
-l 查看定时任务
-r 删除定时任务
-u 指定其他用户

2.4 注意事项

* 1. 在使用crontab命令编辑的时候, *号不能少了, 有五个 * !!!, 否则会报错.
* 2. 给定时任务注释, 写多了太乱不清晰.
* 3. 将需要定期执行的任务写入Shell脚本中, 避免直接使用命令无法执行的情况tar date
* 4. 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件
* 5. 注意有些命令是无法成功执行的 echo “123” >>/tmp/test.log &>/dev/null 新版本可以
* 6. 如果一定要是用命令, 命令必须使用绝对路径

2.5 crond备份

* 1. 通过查找/var/log/cron中执行的记录, 去推算任务执行的时间
[root@kid ~]# ll /var/log/cron
-rw-------. 1 root root 12543 Sep 11 21:12 /var/log/cron
[root@kid ~]# cat /var/log/cron
...
Sep 11 21:02:01 kid CROND[2085]: (root) CMD (ls)
Sep 11 21:04:01 kid CROND[2095]: (root) CMD (ls)
Sep 11 21:06:02 kid CROND[2104]: (root) CMD (ls)
Sep 11 21:08:01 kid CROND[2114]: (root) CMD (ls)
...
* 2. 定时的备份/var/spool/cron/{usernmae}
[root@kid ~]# ll /var/spool/cron/root
-rw-------. 1 root root 253 Sep 11 21:11 /var/spool/cron/root
[root@kid ~]# cat /var/spool/cron/root
HELL=/bin/bash
# 环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 邮件发给谁(将执行的结果以邮件的方式发生到指定有户的邮箱)
MAILTO=root
# 每天的下午3,5点, 每隔半小时执行一次ls命令
*/2 *20,21 * * *  ls

2.6 crond拒绝某个用户使用

# 1.使用root将需要拒绝的用户加入/etc/cron.deny
# 文件默认是空的
[root@kid ~]# cat /etc/cron.deny # 限制qq用户的使用
[root@kid ~]# echo "qq" >> /etc/cron.deny
# 限制xx用户的使用
[root@kid ~]# echo "xx" >> /etc/cron.deny [root@kid ~]# cat /etc/cron.deny
qq
xx
# 2.登陆该普通用户, 测试是否能编写定时任务
# 后创建用户一样的
[root@kid ~]# useradd qq
[root@kid ~]# su - qq
[qq@kid ~]$ crontab -e
You (qq) are not allowed to use this program (crontab)
See crontab(1) for more information

3.实例

3.1 案例1

使用root用户每5分钟执行一次时间同步
# 1.如何同步时间
# 安装ntpdate
[root@kid ~]# yum  install ntpdate -y# 自动更新时间
[root@kid ~]# ntpdate time.windows.com
11 Sep 19:32:44 ntpdate[1473]: adjust time server 20.189.79.72 offset 0.193178 sec# 2.配置定时任务  (crontab命令会使用vi编辑器)
[root@kid ~]# crontab -e -u root
# 执行命令的解释器
SHELL=/bin/bash
# 环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 邮件发给谁(将执行的结果以邮件的方式发生到指定有户的邮箱)
MAILTO=root
# 使用root用户每5分钟执行一次时间同步
*/5 * * * *       ntpdate time.windows.com &>/dev/null# wq 保存并退出
# 出现创建成功的提示
crontab: installing new crontab
# 如果编辑有问题会报错 (第n行有问题)
"/tmp/crontab.iAez82":第n行: bad minute
# 查看任务
[root@kid ~]#  crontab -l -u root
HELL=/bin/bash
# 环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 邮件发给谁(将执行的结果以邮件的方式发生到指定有户的邮箱)
MAILTO=root
# 使用root用户每5分钟执行一次时间同步
*/5 * * * *      ntpdate time.windows.com
注意: 下列代码将信息丢京黑洞, 邮箱不会有信息
*/5 * * * *      ntpdate time.windows.com &>/dev/null
# 过5分钟过会在终端出现
You have new mail in /var/spool/mail/root# 安装邮箱
[root@kid ~]# yum -y install mailx# 查看邮件
[root@kid ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 messages
>N 1 (Cron Daemon) Sun Sep 11 20:47  27/961 "Cron <root@kid> ntpdate tim"
# 输入1查看信息
& 1
...
# 退出邮箱
& q

3.2 案例2

每天的下午3,5点, 每隔半小时执行一次ls命令
# 配置任务
[root@kid ~]# crontab -e -u root
HELL=/bin/bash
# 环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 邮件发给谁(将执行的结果以邮件的方式发生到指定有户的邮箱)
MAILTO=root
# 每天的下午3,5点, 每隔半小时执行一次ls命令
*/30 *3,5 * * *  ls# wq 保存

3.3 案例3

每天凌晨3点做一次备份, 备份/etc/目录到/backup下面
1. 将备份命令写入一个脚本中
2. 每天备份文件名要求格式: 2022-05-01_hostname_etc.tar.gz
3. 在执行计划任务时, 不要输出任务信息
4. 存放备份内容的目录要求只保留三天的数据
# 列出代码
# 1. 创建备份目录
mkdir /backup
# 创建压缩文件并设置 文件名格式
tar zcf $(date +%F)_$(hostname)_etc.tar.gz /etc
# 备份超过三天的备份文件压缩包删除掉
find /backup -name “.tar.gz” -mtime +3 -exec rm -f {};
# 代码讲解
# date +%F 获取时间 包含 年 月 日
[root@kid ~]# date +%F
2022-09-11# hostname获取主机名
[root@kid ~]# hostname
kid# $() 括号中执行的命令的结果会替换$()# 查找backup目录下文件名包含 .tar.gz的 指定文件创建时间大于三天的
find /backup -name “.tar.gz” -mtime +3
find 的 -exec参数 后面跟自定义 shell 命令, 标准写法 -exec  shell 命令 ;
{} 表示把查找到的结果发送到此来, 执行rm -f 删除掉
#  将命令写入至一个文件中
[root@kid ~]# vim /root/back.sh
mkdir /backup
tar zcf $(date +%F)_$(hostname)_etc.tar.gz /etc
find /backup -name “.tar.gz” -mtime +3 -exec rm -f {};  # 配置定时任务
[root@kid ~]# crontab -l
00 03    bash /root/back.sh  &>/dev/null

4. crond计划任务调试

* 1. 调整任务每分钟执行的频率, 以便做后续的调试.  * 2. 如果使用cron运行脚本, 请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常.  * 3. 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障.  * 4. 通过查看/var/log/cron日志, 以便检查我们执行的结果, 方便进行调试.

5. crond编写思路

* 1.手动执行命令, 然后保留执行成功的结果.* 2.编写脚本脚本需要统一路径/scripts脚本内容复制执行成功的命令(减少每个环节出错几率)脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null* 3.执行脚本使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)执行脚本成功后, 复制该执行的命令, 以便写入cron* 4.编写计划任务加上必要的注释信息, 人、时间、任务设定计划任务执行的周期粘贴执行脚本的命令(不要手敲)* 5.调试计划任务增加任务频率测试检查环境变量问题检查crond服务日志

————————————————
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
————————————————

19-Linux计划任务相关推荐

  1. linux计划任务一小时,linux,计划任务,每小时执行一次(共7篇).docx

    linux,计划任务,每小时执行一次(共7篇) Linux下的计划任务命令小结 在UNIX下怎样实现和Windows下"计划任务"一样的功能 $crontab-e编辑脚本 $cro ...

  2. Linux系列教程——1 Linux磁盘管理、2 Linux进程管理、3 Linux系统服务、 4 Linux计划任务

    文章目录 1 Linux磁盘管理 1.磁盘的基本概念 1.什么是磁盘 2.磁盘的基本结构 3.磁盘的预备知识 1.磁盘的接口类型 2.磁盘的基本术语 3.磁盘在系统上的命名方式 4.磁盘基本分区Fdi ...

  3. 运维基本功(十):Linux计划任务以及进程检测与控制

    本文是在课程课件基础上修改的学习笔记 课程原地址:https://www.bilibili.com/video/BV1nW411L7xm 如有侵删 运维基本功(一):Linux系统安装 运维基本功(二 ...

  4. linux计划任务at-crontab 与日志的管理使用

    linux计划任务与日志的管理 引子: 大家平常都会有一些比如说:你每天固定几点起床?每天按时上班打卡.每月 15 号准时开工资.每年 2 月 14 你俩口子某某纪念日等这些诸如此类,这些都是定时发生 ...

  5. Linux计划任务(at/crontab)

    linux计划任务(crontab) 一.仅执行一次的定时任务-atd 1. at是个可以处理仅执行一次就结束的定时任务的命令,需要先启动atd服务 2. 启动atd服务 查看atd服务的状态(大部分 ...

  6. linux的周期计划任务叫atd,linux计划任务

    一.单一计划任务 安装at: # yum -y install at 启动: # /etc/init.d/atd start 查看是否运行: # ps aux | grep atd 创建计划 # at ...

  7. linux计划任务执行bin文件,Linux任务计划和周期性任务执行

    linux计划任务有两类 at:未来某个时间点仅执行一次任务就结束的指令,at指令执行时必须要有atd这个服务支持. crontab:可以以时间单位为分钟,小时,每天,每周,每月,每年等循环执行某任务 ...

  8. linux的任务计划6,Linux计划任务

    Linux计划任务: 未来的某个时间执行一次任务,或者周期性执行某个任务,执行结果会通过邮件通知 定时任务:at batch 周期性任务:crontab 系统任务调度:/ect/crontab 用户任 ...

  9. 云计算实战系列十三(Linux计划任务)

    Linux计划任务 知识点: · 循环调度执行 cron 用户级 · 企业应用项目实战(cron) · /etc/crontab · 日志的重要性 · rsyslog 日志管理 · logrotate ...

  10. Linux计划任务-定时任务

    Linux计划任务-定时任务 at单次计划任务 at命令格式 查看at任务 取消at计划任务 创建1分钟后的单次任务 定时任务分类 cron`系统任务调度` /etc/crontab文件格式 用户任务 ...

最新文章

  1. [019] C#基础:理解装箱与拆箱
  2. python读取pcd点云/转numpy(python2+python3,非ROS环境)
  3. golang 面向接口编程
  4. 利用阿里云搭建Java Web开发环境
  5. layui中接收modelView中返回的对象并赋值给容器
  6. Java 服务器端支持断点续传的源代码
  7. 【夏日护眼妙招】三种食物要多吃
  8. python 下载m3u8视频_python 下载m3u8视频的示例代码
  9. Android学习日记(yzy):opengl 绘制2d图形 基本框架
  10. PyQt获取某天之前后的n天日期
  11. YoloV5 训练长方形图像
  12. 滴滴梁李印:滴滴是如何从零构建中式实时计算平台的?
  13. Java POI导出(图片,文字,表格)word文档
  14. mysql in 查询效率慢优化
  15. 互融云供应链金融系统4.0 来了!系统又增哪些亮点?
  16. JAVA实现CSV文件转JSON。
  17. linux 发邮件给用户,Linux学习之给指定用户发邮件
  18. [No0000141]Outlook,设置全局已读回执
  19. 新手请看:三菱PLC学习方法分享
  20. 美食最大的意义在于分享

热门文章

  1. HTTP 和HTTPS 连接过程详解(SSL TLS)
  2. 小米开发平台上架APP
  3. node-telegram-bot-api 基于Nodejs的TG机器人
  4. java微信公众号开发及源码分享
  5. LeetCode:Database 21.统计各专业学生人数
  6. FPGA学习-m序列信号发生器
  7. Maven配置nexus私服地址
  8. Rectangle和RectangleF结构
  9. [Go]获取当前时间戳秒/毫秒/纳秒 转成字符串string
  10. 会话/序列推荐:Caser、SASRec、BERT4Rec [Session based / Sequential Recommendation]