作者:丁仪

来源:https://chengxuzhixin.com/blog/post/LinuxCron-ding-shi-ren-wu.html

定时任务是经常被用到的,比如系统备份、数据导出等。在 Linux 中,系统提供了 cron 服务,可以很方便地实现定时执行。本文记录了 cron 的使用方法。

基本概念

cron 有 crond 和 crontab 两个概念。

crond 是后台守护进程的名称,用来实际执行脚本,它在系统中是一直运行的。

crontab 是一个工具,用来管理定时任务列表,比如添加作业、编辑作业、删除作业、查看作业。作为管理工具,不会后台运行,需要手动调用,执行完自动退出。

开启 crond 服务

crond 默认没有开启,需要手动启动一次服务。服务启动后,会一直运行,即便是重启系统,也会自动运行。相关命令使用 systemctl 执行:

  • 启动服务:systemctl start crond
  • 关闭服务:systemctl stop crond
  • 重启服务:systemctl restart crond

添加、查看定时任务

假设我们需要定时导出 MySQL 到指定文件,创建 /home/apps/backup.sh 文件,并赋予执行权限,内容如下:

/usr/local/mysql/bin/mysqldump  --skip-lock-tables -udemo -pdemo demo > /home/apps/demo.sql

然后创建一个作业文件 /home/apps/backup.cron,每天 1 点整执行 backup.sh,内容如下:

0 1 * * * /home/apps/backup.sh

然后使用 crontab 添加定时任务,命令如下:

crontab /home/apps/backup.cron

查看定时任务,任务已经添加成功,命令如下:

crontab -l

0 1 * * * /home/apps/backup.sh

cron 的定时任务需要在作业文件中设定执行时间,包括时分秒、天数等,一共 7 个部分,格式如下:

分 时 日 月 星期 年 命令

其中:

分:必须,可选 0-59,可设置 ,-*/ 特殊字符

时:必须,可选 0-23,可设置 ,-*/ 特殊字符

日:必须,可选 1-31,可设置 ,-*?/LW 特殊字符

月:必须,可选 1-12或 jan-dec,可设置 ,-*/ 特殊字符

星期:必须,可选 0-7 或 sun-sta,可设置 ,-*?/L# 特殊字符

年:非必须,可留空,可设置 1970-2099,可设置 ,-*/ 特殊字符

几个特殊字符的含义如下:

*    全部。意思是在该时间的任意点都应当执行?不指定,任意。仅用于 日(月)和日(周)。0 0 5 *

?     代表每个月的第5天零点,不论星期几。0 0 ? * 1 代表每周一,不论是当月的哪天。

,     多个值的分隔符,例如1,5,10

-     代表连续值,例如1-20

/     步长。例如 5/15,代表从5开始,以15为步长。因此,当5/15位于分钟的位置时,表示小时内的第5、20、35和50分钟。

L     最后一天。可以是每月最后一天或者每周最后一天。如果用在 天(周)字段,并且前面加数字,则表示最后一个周N。例如5L,表示最后一个周五(5表示周五,L表示最后)。

W     工作日,指周一到周五的任意一天

#     表示第几个的意思,例如 6#3,表示当月第3个星期六(6表示周六,3表示第3个)

举例如下:

实例1:每1分钟执行一次myCommand

* * * * * myCommand

实例2:每小时的第3和第15分钟执行

3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

删除定时任务

crontab -r 删除所有作业。如果只删除部分,需要通过编辑来实现。

编辑定时任务

使用 crontab -e 可以编辑定时任务,自动打开 vim 编辑器,直接修改即可。编辑完成后,立即生效,不需要重新添加。编辑不影响 backup.cron 文件,因此不建议 crontab -e 直接修改。最好是修改 cron 文件然后重新添加任务。这样可以保证有个备份,方便日后使用和查看。

查看任务日志

在作业执行出现异常(或作业脚本写日志)时,cron服务会输出日志。查看的地址位于 /var/log 下。如 ls /var/log | grep cron。

推荐阅读

人类简史、软件架构和中台

限流算法探秘

Git 工作原理

MyBatis 一级二级和自定义缓存

Mysql InnoDB和MyISAM区别总结

Linux Cron 定时任务的更多相关文章

  1. linux Cron 定时任务(centos 7.2 测试可用)

    1.Cron(学习笔记) 计划任务,是任务在约定的时间执行已经计划好的工作. 格式如下 Seconds Minutes Hours DayofMonth Month DayofWeek Year    ...

  2. linux下的cron定时任务知识梳理

    1 cron定时任务 1.1 cron介绍 为什么需要cron定时任务? 1)cron服务在安装完Linux系统后就默认就存在,主要用来定期执行命令或定期执行指定的应用程序; 2)cron服务默认情况 ...

  3. linux ,cron定时任务 备份mysql数据库

    cron 定时任务执行备份脚本文件 backup.sh #!/bin/bash USER="root" PASSWORD="xxxxx" DATABASE=&q ...

  4. Go cron定时任务的用法

    cron是什么 cron的意思就是:计划任务,说白了就是定时任务.我和系统约个时间,你在几点几分几秒或者每隔几分钟跑一个任务(job),就那么简单. cron表达式 cron表达式是一个好东西,这个东 ...

  5. Linux之定时任务Crond使用

    Linux之定时任务Crond使用 一.用法 crond服务是linux系统自带的服务,是不需要手动安装的: crond服务是一种守护进程: Linux中的用户使用contab命令来配置corn任务: ...

  6. Linux之定时任务crond

    定时任务说明与分类 定时任务的应用场景举例 每天晚上 12点备份/etc/目录 tar 定时任务的三种分类 crond(crontab)定时任务软件(软件包cronie),用的最多的一种 atd,应用 ...

  7. cron定时任务介绍

    什么是cron? Cron是linux系统中用来定期执行或指定程序任务的一种服务或软件.与它相关的有两个工具:crond 和 crontab.crond 就是 cron 在系统内的宿主程序,cront ...

  8. Linux系统定时任务crond那些事

    1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...

  9. 【Python】Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在 ...

随机推荐

  1. 从官方文档中探索MySQL分页的几种方式及分页优化

    概览 相比于Oracle,SQL Server 等数据库,MySQL分页的方式简单得多了,官方自带了分页语法 limit 语句: select * from test_t LIMIT {[offset ...

  2. STL_优先队列

    一.简介 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队. 元素 ...

  3. 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解

    2019 第十届蓝桥杯大赛软件类省赛 Java A组 试题A 题解 ​ 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long). ​ 本题思路很直白,两重循环.外层 ...

  4. Centos根目录100%解决思路

    Centos 7 根目录(爆满)100%解决思路,下面以宝塔面板环境为例 1.首先远程到服务器,在~下输入df -h ,看下根目录下文件夹使用情况 [root@localhost~]# df -h F ...

  5. 2019牛客暑期多校训练营(第二场)E.MAZE(线段树+dp)

    题意:给你一个n*m的矩阵 你只能向左向右相下走 有两种操作 q次询问 一种是把一个单位翻转(即可走变为不可走 不可走变为可走) 另一种是询问从(1,x) 走到 (n,y)有多少种方案 思路:题目n为 ...

  6. P3803 [模板] 多项式乘法 (FFT)

    Rt 注意len要为2的幂 #include <bits/stdc++.h> using namespace std; const double PI = acos(-1.0); inli ...

  7. zjnu1181 石子合并【基础算法・动态规划】——高级

    Description 在操场上沿一直线排列着  n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆,  并将新的一堆石子数记为该次合并的得分.允许在第一次合并前对调一 ...

  8. JavaScript——匿名函数和闭包

    匿名函数就是没有名字的函数 闭包就是一个函数中的另一个函数 函数可以不加分号,但是语句要加!! 可以把匿名函数的返回值赋值给变量!! box()时返回里面的函数,再加一个()就会返回里面那函数的值(浅 ...

  9. 牛客编程巅峰赛S1第5场 - 青铜&白银 B.完全平方数的尾巴 (暴力)

    题意:有一个数\(x\),判断其是否能有某个完全平方数$mod$1000得到. 题解:直接写个for判断一下就好了,因为对1000取模,所以枚举到1000即可. 代码: class Solution ...

  10. ElasticSearch 搜索引擎概念简介

    公号:码农充电站pro 主页:https://codeshellme.github.io 1,倒排索引 倒排索引是一种数据结构,经常用在搜索引擎的实现中,用于快速找到某个单词所在的文档. 倒排索引会记 ...