Linux学习笔记之Linux计划任务Crontab

0x00 cron 简介

cron 是 UNIX, SOLARIS,LINUX 下的一个十分有用的工具。通过 cron 脚本能使计划任务定期地在系统后台自动运行。

0x01 cron 命令

  • crontab -e     – 编辑该用户的 crontab,当指定 crontab 不存在时新建。
  • crontab -l     – 列出该用户的 crontab。
  • crontab -r     – 删除该用户的 crontab。
  • crontab -u<用户名称>     – 指定要设定 crontab 的用户名称。

0x02 Linux Crontab 格式

表格: Crontab 字段与允许的值 (Linux Crontab

0x03 cron 实例和用法

1. 特定时间执行

cron 的基本用法是在特定的时间执行一项任务,如下是 6 月 10 上午 8:30 执行 Full backup shell script。 要注意的是时间字段采用的是 24 小时制,如果是下午 8 点,则改写为 20 点。

30 08 10 06 * /home/ramesh/full-backup
  • 30 – 第 30 分钟
  • 08 – 早上 8 点
  • 10 – 10 号
  • 06 – 第 6 个月 (6 月)
  • * – 一周的任何一天

2. 安排多个实例(比如一天执行两次)

下面的增量备份脚本每天执行两次。

每天于 11:00, 16:00 执行,逗号两侧的时间都会执行。

00 11,16 * * * /home/ramesh/bin/incremental-backup
  • 00 – 第 0 分钟 (每小时开时)
  • 11,16 – 早上 11 点与下午 4 点
  • * – 每天
  • * – 每个月
  • * – 一周的任何一天

3. 让任务只在特定时间执行(比如仅当工作日时执行)

下面这个例子是每天 9:00-16:00 检查数据库状态(包括周六)

00 09-18 * * * /home/ramesh/bin/check-db-status
  • 00 – 第 0 分钟 (每小时开时)
  • 09-18 – 9 点, 10 点, 11 点, 12 点, 下午 1 点, 下午 2 点, 下午 3 点, 下午 4 点, 下午 5 点, 下午 6 点
  • * – 每天
  • * – 每个月
  • * – 一周的任何一天

如果只想工作日执行此操作

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
  • 00 – 第 0 分钟 (每小时开时)
  • 09-18 – 9 点, 10 点, 11 点, 12 点, 下午 1 点, 下午 2 点, 下午 3 点, 下午 4 点, 下午 5 点, 下午 6 点
  • * – 每天
  • * – 每个月
  • 1-5 – 周一, 周二, 周三, 周四和周五 (工作日)

4. 如何查看 cron 定时任务

查看当前用户定时任务

ramesh@dev-db$ crontab -l

查看 ROOT 用户定时任务,用 root 登入 su-root,再执行 crontab -l

root@dev-db# crontab -l
no crontab for root

查看其它用户定时任务

root@dev-db# crontab -u sathiya -l
@monthly /home/sathiya/monthly-backup
00 09-18 * * * /home/sathiya/check-db-status

5. 如何编辑 cron 定时任务

ramesh@dev-db$ crontab -e

6. 安排每分钟都执行定时任务

理论情况下,没有每分钟都要执行的 shell,但下面这个例子,让我们更好的了解 crontab

* * * * * 命令

* 代表着所有可能取到的值,除了直接用 * 外,下面的几个例子也较为常用

  • 当指定 */5 在分钟字段,代表每五分钟。
  • 当指定 0-10/2 在分钟字段,代表在前十分钟的每两分钟

上面的例子对于其它四个字段同样适用

7. 安排后台每十分钟执行定时任务

*/10 * * * * /home/ramesh/check-disk-space

有一些特殊的例子,可以用关键字替代上述五个字段– reboot, midnight, yearly, hourly

Table: Cron special keywords and its meaning

8. 每一年的第一分钟执行定时任务(@yearly)

下面的例子将在每一年的 1 月 1 日 0:00 执行

@yearly /home/ramesh/red-hat/bin/annual-maintenance

9. 每月执行定时任务(@mothly)

下面的例子将在每月 1 日 0:00 执行

@monthly /home/ramesh/suse/bin/tape-backup

10. 每天执行定时任务(@daily)

下面的例子将在每天 0:00 执行

@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"

11. 每次重启时执行定时任务(@reboot)

@reboot CMD

12. 如何用 mail 关键字禁止/重定向 cron 的邮件

默认情况下,crontab 将向布置定时任务的管理员发送邮件,如果想重定向此用户,添加并更新 MAIL

ramesh@dev-db$ crontab -l
MAIL="ramesh"
 
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

如果不想任何人接收,则直接将 MAIL 置空。

13. 如何系秒每执行一个定时任务

无法安排每秒执行,因为最小处理单元是分钟,另一方面,没有什么理由让我们每秒都执行一任务

14. cron 中的 PATH 变量

上面的例子都是用绝对的路径

如果你想用相对的路径,设置环境变量可以在 crontab 增加

ramesh@dev-db$ crontab -l
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh
 
@yearly annual-maintenance
*/10 * * * * check-disk-space

15. 从 cron 文件中定义 cron 任务

除了直接编辑外,你也可以先在一个文件中编辑好任务,再导入

ramesh@dev-db$ crontab -l
no crontab for ramesh
 
$ cat cron-file.txt
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
 
ramesh@dev-db$ crontab cron-file.txt
 
ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
 
*/10 * * * * /home/ramesh/check-disk-space

应用时要注意,此操作会覆盖原有的cron任务

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Timhbw博客

关于网站后期速度优化的一些坑

2016-06-0109:12:42 发表评论 231℃热度 由于网站已经迁移完成,所以昨天在优化服务器和WP,加快读者们的访问速度,毕竟有强迫症的我不能忍受...

2834
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(二十五):常见的网络攻防

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

1422
来自专栏Java架构

阿里P9架构师谈:高并发网站的监控系统选型、比较、核心监控指标

在高并发分布式环境下,对于访问量大的业务、接口等,需要及时的监控网站的健康程度,防止网站出现访问缓慢,甚至在特殊情况出现应用服务器雪崩等场景,在高并发场景下网站...

3134
来自专栏抠抠空间

数据库简介

一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。 如果我们暂且忽略直接基于文件来存...

3507
来自专栏java思维导图

高并发的核心技术-幂等的实现方案

我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反...

2224
来自专栏奇点大数据

Hbase优化

本文对hbase集群进行优化,主要涵盖硬件和操作系统,网络通信,JVM,查询,写入,核心服务,配置参数,zookeeper,表设计等多方面。 我...

3675
来自专栏FreeBuf

MacOS再次出现漏洞,号称牢不可破的系统也有弱点

本文讲述了我在苹果的macOS系统内核中发现的几个堆栈和缓冲区溢出漏洞,苹果官方将这几个漏洞归类为内核中的远程代码执行漏洞,因此这些漏洞的威胁级别非常高。攻击者...

872
来自专栏散尽浮华

linux负载均衡总结性说明(四层负载/七层负载)

在常规运维工作中,经常会运用到负载均衡服务。负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 一,什么是负载均衡 1)负载均衡...

7728
来自专栏FreeBuf

反取证技术:内核模式下的进程隐蔽

介绍 本文是介绍恶意软件的持久性及传播性技术这一系列的第一次迭代,这些技术中大部分是研究人员几年前发现并披露的,在此介绍的目的是建立这些技术和取证方面的知识框架...

3228
来自专栏Laoqi's Linux运维专列

Kubernetes 1.8.6 集群部署–钉钉报警(十二)

1473

扫码关注云+社区