Linux基础命令(十七)定时任务crontab

本文深入解析Linux系统的定时任务机制,包括crond服务、crontab命令的使用、系统与用户级别的任务调度,以及常见问题与解决方案。通过实例,读者可以掌握如何在Linux环境下设置和管理周期性任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

、综述

       Linux 系统则是由crond这个系统服务来控制的,Linux 系统上面原本就有非常多的计划性(周期)工作(有哪些呢),因此这个系统服务是默认启动的,另外由于使用者自己自定义周期性的计划任务,所以 Linux 系统也提供了使用者控制计划任务的命令 crontab 命令。

后续:Linux默认的周期性任务有哪些?

=================分割线================================

、crontab命令

    作用:是用于设置、移除、显示相关为crond守护进程服务周期性任务!

    原理:Linux系统默认会安装crond守护进程, 并在开机的时候自动启动,每个用户属于自己的crontab,并且将任务保存在/var/spool/cron目录下的文件中(用户级别),任务的保存形式以相应的用户名作为文件名

    注意:如果要使用crontab的时候,必须先查看crond服务是否开启

Linux下的任务调度分为两类(级别):系统任务调度和用户任务调度

  1. 系统任务调度--->默认是root有权限修改!

          功能:系统周期性所要执行的工作,比如写缓存数据到硬盘日志清理等!

          配置文件:/etc/crontab

          配置文件的内容

[root@localhost ~]# cat /etc/crontab 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root ---> //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号-->设置为""则不发送信息
# HOME=/    ---> //使用者运行的路径,这里是根目录(可以省略)
# For details see man 4 crontabs 
# Example of job definition: 
# .---------------- minute (0 - 59) 
# |  .------------- hour (0 - 23) 
# |  |  .---------- day of month (1 - 31) 
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... 
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 
# |  |  |  |  | 
# *  *  *  *  * user-name  command to be executed 
# run-parts

命令的格式:分 时 天 月 星期 用户名 命令------>七个字段!

说明:在这个文件里并没有记录系统要执行哪些工作,而是记录了下面四个"子目录" -->man 4 crontabs查出
     /etc/cron.hourly
     /etc/cron.daily
     /etc/cron.weekly
     /etc/cron.monthly
特点:这些子目录里存放了一些脚本,到了crontab所指定的时间点,系统就会去执行这些子目录里的脚本!

补充:crond读取配置文件(系统级别)的其他位置:/etc/cron.d/*;

注意:/etc/cron.d/目录的内容!特点:是crontab的配置脚本文件

10:18:24][root@foundation10:~]# ls -l /etc/cron.d/

-rw-r--r--. 1 root root 128 Feb 23  2016 0hourly
-rw-r--r--. 1 root root 108 Sep 27  2016 raid-check
-rw-------. 1 root root 235 Jun  1  2016 sysstat

举例:0hourly的内容

# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

cron系统每小时任务(其它类同)

/etc/crontab-->/etc/cron.d/0hourly(文件)--> run-parts /etc/cron.hourly/*(目录下的执行文件)-->执行里面的脚本
/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab!
/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本!

run-parts 命令的用法及原理

run-parts内容:很简单的一个shell脚本,就是遍历目标文件夹执行第一层目录下的可执行权限的文件,通常是shell脚本!

etc下的其他调度文件的目录
   1. cron.daily    -------->cron的服务
   2. cron.hourly   -------->anacron的服务
   3. cron.monthly  -------->anacron的服务
   4. cron.weekly   -------->anacron的服务

说明:关于anacron稍后补充!

计划任务的特殊格式:

(1)星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令
(2)整数间的短线(-)指定一个连续整数范围。譬如,1-4 意味着整数 1、2、3、4
(3)用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数
(4)正斜线(/)可以用来指定间隔频率。在范围后(或*后)加上 /<integer> 意味着在范围内可以跳过 integer。譬如,0-59/2(*/2) 可以用来在分钟字段定义每两分钟
(5)开头为井号(#)的行是注释,不会被处理

===============分割线====================

    2.用户级别任务调度

        用户定期要执行的工作,比如用户数据备份定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab任务被保存在/var/spool/cron目录中,其文件名与用户名一致,相应文件如下:

  • /etc/cron.deny 该文件中所列用户不允许使用crontab命令--->默认存在且为空
  • /etc/cron.allow 该文件中所列用户允许使用crontab命令--->缺省不存在,但优先级高!
  • /var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名--->注意命名的特点权限和属性(特殊)!

引申

 ls -l /usr/bin/crontab 
 #注意特殊权限:-rwsr-xr-x

crontab的使用方法

  (1)常用选项

-e:编辑该用户的cron来设置--->每个用户都只有一个文件存在,在/var/spool/cron/目录中!vi的:wq保存
-l:查看该用户的所有任务; 
-r:删除该用户的"全部任务"--->如果删除一项任务的话,必须用"crontab -e"去编辑! 
-u<用户名称>:指定要设定任务的用户名称;只有root用户可以指定,"帮助"其它用户删除或建立crontab的计划任务!

(2)crond用户级别的任务格式书写

注意:与系统级别格式的区别?--->由于已经是当前用户的任务计划,所以无需指定username

补充:command也可以是脚本文件----->但必须有rx的权限,最好是全路径----->/home/username/test.sh!

(3)crontab常用的时间表示方式

*     *      *      *      *      *       #每分钟
*/2   *                                   #每隔两分钟
*/2   09-17  *      *      *      *       #早9晚5每两分钟
*/2   06-12  *      1,3    *      5       #周5或者每月的1到3号的早上6点到12之间每隔2分钟
01-10 *      *      1      1      *       #一月一号的每小时01到10分钟执行

(4)测试

    4.1)el的使用

    4.2)e的原理

    注意:会有语法校验!

    4.3)任务的取消r

    4.4)root帮助指定用户的定时任务

    4.5)crontab执行权限

四、系统中的临时文件

临时文件的策略:系统中服务在正常运行时会产生临时文件,在系统中 /usr/lib/tmpfiles.d/ 标示服务的临时文件存放位置!

#临时策略的目录:/usr/lib/tmpfiles.d/

systemd-tmpfiles  --create   /usr/lib/tmpfiles.d/test.conf(执行临时文件的策略)
systemd-tmpfiles  --clean    /usr/lib/tmpfiles.d/test.conf(清除临时文件)

详见:man帮助文档或中文手册

关于/tmp目录的清理规则

补充1

补充2

五、cron定时任务执行失败的原因

链接1

六、linux定时任务crontab 实现如何每秒执行一次

链接1链接2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值