Linux|定时任务Crond服务管理

Linux|定时任务Crond服务管理

文章参考:https://zhuanlan.zhihu.com/p/283673998

1、Cron介绍

Cron是 Linux系统中以后台进程模式周期性执行命令或指定程序任务的服务软件。默认情况下,安装完Linux操作系统之后,Cron服务软件便会启动,服务对应的进程名字为Crond,Crond服务会定期((默认每分钟检查一次)检查系统中是否有需要执行的任务工作计划。如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作。Cron工具很好地帮我们解决了需要周期性自动备份的运维工作。

Linux系统中的Cron定时任务的最快执行频率是每分钟执行一次,因此如果是需要以秒为单位执行计划任务,Cron就搞不定了。面对这种情况,在工作中可以写Shell脚本,然后作为守护进程执行。

在 Linux系统中,Cron是定时任务的软件名,Crond是服务进程名,而crontab命令是用来设置定时任务规则的配置命令。Cron定时任务软件依赖于Crond服务,要使得crontab命令设定的配置生效,必须先启动Crond服务

2、定时任务的类型

2.1、用户定时任务计划

Crond 服务在工作时会以分钟为单位查看/var/spool/cron路径下以系统用户名命名的定时任务文件,确定是否有需要执行的任务计划。如果有,就会把定时任务调度到内存中执行,这部分文件可称为用户定时任务文件,使用crontab命令编辑的文件最终都会以当前用户名作为文件名存在于/var/spool/cron路径下

如果是系统管理员或某个普通用户定期要做的任务工作,就可以使用crontab命令配置在/var/spool/cron路径下。

2.2、系统定时任务计划

Crond 服务在工作时除了查看/var/spool/cron下的定时任务文件外,还会查看/etc/cron.d目录以及/etc/anacrontab下的文件内容,里面通常是每天、每周或每月需要执行的任务,如果有需要执行的任务就会执行,系统定时任务通常是如下路径:ls -l /etc | grep cron

一般有以下文件:

  • cron.d<==系统定时任务的目录
  • cron.daily<==按天轮询配置的目录
  • ron. hourly<==按小时轮询配置的目录
  • cron . tmonthly<==按月轮询配置的目录
  • cron .weekly <==按周轮询配置的目录

Crond服务除了执行用户定时任务计划(/var/spool/cron目录)以外,还会周期性地自动执行和操作系统相关的定时任务工作,例如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需人为干预。

3、用户定时任务具体用法

3.1、crontab命令

选项

  • -l(小写):查看定时任务内容
  • -e:编辑定时任务内容
  • -i:删除定时任务内容,删除前会提示确认
  • -r:删除定时任务内容
  • -u:指定使用的用户执行任务

ps:-i,-r参数在生产中很少用,另外,使用crontab命令编辑的文件实际上就是在操作“/var/spool/cron/当前用户名”这样的文件

3.2、定时任务软件相关文件
  • /etc/cron.deny:该文件中所列用户不允许使用crontab命令,不常用
  • /var/spool/cron/:所有用户的Cron 配置文件默认都存放在此目录中,文件名以用户名命名。以root用户为例,执行crontab -e就等同于执行vim /var/spoolcron/root,而执行crontab -1就等同于执行cat /var/spool/cron/root
3.3、crontab命令编辑内容格式

利用crontab命令编写定时任务的书写格式很简单,规则一般分为6个段(每个段通过空格来分隔),前5段为时间设定段,第6段为所要执行的命令或脚本任务段

如:* * * * * 命令或脚本(每个列之间必须要有一个空格,可以有多个空格)

时间段具体含义

  • 第1段代表分钟:00~59 ( 00也可以是0)
  • 第2段代表小时:00~23
  • 第3段代表日(天):01~31
  • 第4段代表月份:01~12
  • 第5段代表星期(周几):0~7(0和7都代表星期日)

特殊符号

  • *:表示任意时间(分时日月周)都会执行
  • -:表示一个时间范围 ,2-3表示2~3(分时日月周)
  • ,:表示分隔时段,3,5,9表示每3,5,9(分时日月周)
  • /:每隔多久,*/10表示每隔10(分时日月周)

ps:查看cron定时任务依赖的服务启动状态:/etc/init.d/crond status

3.4、遇到的问题及解决
3.4.1、"/tmp/crontab.HiNA2c":1: bad minute
# 报错信息
crontab: installing new crontab
"/tmp/crontab.HiNA2c":1: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit?
# 解决方法:一般是在vim编辑器内写的定时命令格式有错误,比如 * - 和空格缺失或错误。
3.4.2、"/tmp/crontab.9IVR7T":12: bad day-of-month
# 报错信息,我这里出现错误的时间格式编写样式: 0 0 1/1 * * (每天凌晨0点执行)
crontab: installing new crontab
"/tmp/crontab.9IVR7T":12: bad day-of-month
errors in crontab file, can't install.
Do you want to retry the same edit?
# 解决方法: 第12行的月份错误,crontab -e保存时,crond会检测时间格式,可参考3.3,正确的应该是: 0 0 * * *  (每天凌晨0点执行)
3.5、检查crond服务日志
tail -f /var/log/cron
posted on 2021-10-12 14:05  cxbks  阅读(701)  评论(0)    收藏  举报