作者:丁仪

来源: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. 牛客挑战赛33 C 艾伦的立体机动装置(几何)

    思路: 我们需要枚举展开多少条边 然后把上底面的点放到和下底面一个平面 然后算两点之间的距离 注意判断直线与线段是否有交点 #include <bits/stdc++.h> using n ...

  2. poj3580 SuperMemo (Splay+区间内向一个方向移动)

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13550   Accepted: 4248 Case Time Limit: ...

  3. 【noi 2.5_1789】算24(dfs)

    最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教.正解很机智--直接随意将几个数"捆绑"在一起,值存在其中一个数上,其他数标记不可再选,直 ...

  4. 洛谷P1628合并序列【模板】(Trie+dfs)

    很久之前写的题了,当时不知道怎么dfs所以卡了一段时间,^_^ 题解:由于题目给了一大堆字符串,所以首先考虑应该可以建树,之后找到T所在的位置,对T所在的位置dfs就行了 代码: 1 #include ...

  5. QQ空间自动点赞js代码

    1.jQuery().each(): each() 方法为每个匹配元素规定要运行的函数. 提示:返回 false 可用于及早停止循环. 函数原型: function(index,element) 为每 ...

  6. System.Windows.Forms.Help

    在开发过程中,基本都需要实现帮助功能,而一般帮助功能就是打开一个帮助文档,System.Windows.Forms提供了Help类用于打开帮助文档,挺方便的. Help类提供的方法如下:   Name ...

  7. codeforces 1037E-Trips 【构造】

    题目:戳这里 题意:n个点,每天早上会在这n个点中加一条边,每天晚上最大的子图满足子图中每个点都有k条或以上的边. 解题思路:看了官方题解,先把所有的点都连上,再从最后一天往前减边,用set维护最大的 ...

  8. LCIS(最长公共上升子序列)模板

    求出LCIS并输出其路径. 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #inc ...

  9. 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    既然已经可以通过 RTSP 获取h264 裸流了.那么通过 FFmpeg 将其保存到文件中怎么做呢? 一.首先RTSP获取 h264 裸流 我们上面两篇文章主要讲的是通过 rtsp://Your ip ...

  10. 用python写的一个自动卸载python包的脚本

    import osplist=os.popen("pip list") # 执行windows cmd命令,获取所有包package列表,并获取返回结果到plist#跳过第1,2行 ...