码字不易,戳下方名片,关注并星标
1 定时任务基本概念
1.1 定时任务简介
在Linux系统中,定时任务是一种在特定时间或间隔内自动执行指定命令或脚本的功能。通过使用定时任务,用户可以自动化地管理和维护系统任务,例如定期备份文件、清理临时文件、监控系统性能等。
简单的说,定时任务相当于一个闹钟,什么时候做什么事
定时任务的实现主要依赖于crontab和crond两个核心组件。
1.2 crontab和crond的关系
crontab是一个命令行工具,它允许用户创建、编辑、查看和管理定时任务,通过crontab,用户可以指定哪些命令或脚本在特定的时间或周期性条件下自动执行。
crond是一个后台服务进程,也称为守护进程(daemon),它在系统启动时自动运行,并且持续监听由crontab指定的定时任务。
crond负责检查每个用户的crontab文件,解析其中的定时任务定义,并在适当的时间触发这些任务的执行。
简单来说,crontab是用来定义任务,crond是用于执行任务,是缺一不可,相辅相成的。
2 安装和配置定时任务
2.1 安装服务
大多数的Linux发行版都已经安装了crond服务,如果没有安装可以手动安装一下
(1)检查是否安装
rpm -qa |grep cron
(2)安装定时任务服务
# 在Debian系列系统上
apt-get install cron
# Redhat系列系统上
yum install -y cronie
cronie软件包,包含crontab命令和cron守护进程。
(3)常用命令
# 启动crond服务
systemctl start crond
# 停止crond服务
systemctl stop crond
# 重启crond服务
systemctl restart crond
2.2 定时任务相关配置文件
(1)主配置文件/etc/crontab
该文件主要包括环境变量和任务格式。
任务格式中“分时日月周”解析:
时间字段 | 描述 |
---|---|
minute | 分钟,取值范围0 - 59 |
hour | 小时,取值范围0 - 23 |
day of month | 哪一日,取值范围1 - 31 |
month | 月份,取值范围1 - 12 |
day of week | 周几,取值范围0 - 6 |
(2)用户级crontab文件
每个用户都可以有自己的crontab文件,这些文件位于/var/spool/cron目录下,并以用户名命名。用户可以通过crontab命令编辑自己的crontab,添加定时任务
(3)目录/etc/cron.d
/etc/cron.d目录包含了系统级的定时任务文件。这些文件遵循与/etc/crontab相同的语法,但允许为每个任务指定不同的用户
2.3 定时任务管理(重点)
(1)添加定时任务:crontab -e
准备定期删除日志的脚本(很实用的脚本,可以直接用到生产环境)
[root@localhost ~]# vi /data/rmlog.sh
#!/bin/bash
# 删除某个目录下14天以前的数据
find /data/logs/css2/ -type f -mtime +14 -exec rm {} \;
# 将Tomcat文件割接,且仅保留三天
cp -a /data/tomcat/logs/catalina.out /data/tomcat/logs/catalina.out_$(date +%F_%H-%M-%S)\.log
echo >/data/tomcat/logs/catalina.out
find /data/tomcat/logs/ -type f -mtime +3 -exec rm -fr {} \;
默认以root用户来添加定时任务
crontab -e
# 每天两点定时执行/data/rmlog.sh脚本
0 2 * * * /bin/sh /data/rm/rmlog.sh
以普通用户liyb来创建定时任务
crontab -u liyb -e
# 每天两点定时执行/data/rmlog.sh脚本
0 2 * * * /bin/sh /data/rm/rmlog.sh
注意:
执行-u指令时需要是root用户下或有管理员权限。
使用普通用户时需要确保有对应的执行权限,不然定时任务就会失败
(2)查看定时任务:crontab -l
在创建定时任务后,/var/spool/cron目录会对应用户的定时任务文件,可以用户的定时任务内容
[root@localhost ~]# cd /var/spool/cron/
[root@localhost cron]# ll
[root@localhost cron]# cat liyb
# 每天两点定时执行/data/rmlog.sh脚本
0 2 * * * /bin/sh /data/rm/rmlog.sh
也可以直接使用crontab -l 查看定时任务内容
# 查看root用户的定时任务
crontab -l
# 查看liyb用户的定时任务
crontab -u liyb -l
(3)删除定时任务:crontab -r
方法一:使用crontab -e进入编辑页面,删除对应的任务,但并不会删除/var/spool/cron目录下对应用户的定时任务文件
方法二:使用crontab -r命令删除,该命令会删除/var/spool/cron用户的定时任务文件,并且无法恢复,请谨慎使用。
# 删除liyb用户的定时任务
crontab -r -u liyb
建议是使用方法一,方法二太简单粗暴了,不太适合斯文人。
(4)特殊符号说明
符号 | |
---|---|
* | 代表所有: * * * * * command 表示每分钟执行一次该任务 |
, 逗号 | 表示“或”关系:* * 1,15 * * 表示每月1号和15号执行 |
/ 斜杠 | 指定时间字段的步长:*/5 * * * * command 表示每隔5分钟执行一次该任务 |
- 短横线 | 表示区间取值:0 3 * * 1-5 command 表示表示周一到周五陵城三点都执行该命令 |
2.4定时任务编写规范
(1)编写定时任务要有注释说明,方便阅读
(2)编写定时任务路径信息尽量使用绝对路径,如/data/rmlog.sh
(3)编写定时任务命令需要采用绝对路径执行,如/usr/sbin/useradd
总结:
本文对Linux的定时任务服务crond和命令crontab进行详解的讲解。在企业生产环境中,可以将一些重复性的工作通过定时任务来进行处理,比如日志定期处理,数据定期备份,可以提高工作效率。
欢迎转发,点亮下方“在看”图标让更多的人看到
如果不想错过精彩内容,记得在公众号页面右上角设为星标,这样每次新文章推送才会第一时间出现在你的订阅列表中。感谢支持!!
往期精彩文章