ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux crontab 简介

2022-05-03 11:36:06  阅读:179  来源: 互联网

标签:11 15 简介 crontab 任务 Linux 执行 crond


Linux crontab

crontab 是 Linux 系统自带的定时执行工具,可以在无需人工干预的情况下运行作业。crontab 通过 crond 进程来提供服务,crond 进程每分钟会定期检查是否有要执行的任务,如果有,则自动执行该任务。crond 进程通过读取 crontab 配置,来判断是否有任务执行,以及何时执行。

crond 进程会在下面这 3 个位置查找 crontab 配置文件。

  • /var/spool/cron/:该目录存放用户(包括 root)的 crontab 任务,每个任务以登录名命名,比如 colin 用户创建的 crontab 任务对应的文件就是/var/spool/cron/colin。
  • /etc/crontab:该目录存放由系统管理员创建并维护的 crontab 任务。
  • /etc/cron.d/:该目录存放任何要执行的 crontab 任务。cron 进程执行时,会自动扫描该目录下的所有文件,按照文件中的时间设定执行后面的命令。

可以看到,如果想执行一个 crontab 任务,就需要确保 crond 运行,并配置 crontab 任务。具体分为以下两步:

第一步,确保crond进程运行状态:


$ systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-11-17 07:11:27 CST; 2 days ago
 Main PID: 9182 (crond)
    Tasks: 1
   Memory: 728.0K
   CGroup: /system.slice/crond.service
           └─9182 /usr/sbin/crond -n

Active: active(running)说明crond进程正在运行,否则可以执行systemctl start crond启动crond进程。

第二步,配置crontab任务

可以通过crontab -e来编辑配置文件,例如执行crontab -e后进入vi交互界面,并配置以下crontab任务:

# 每分钟输出时间到文件 /tmp/test.txt
* * * * * echo `date` >> /tmp/text.txt

# 每隔2分钟同步一次互联网时间
*/2 * * * * /usr/bin/ntpstat time.windows.com > /dev/null 2>&1

编辑后的配置文件保存在/var/spool/cron/$USER文件中。你可以通过crontab -l或者sudo cat /var/spool/cron/$USER来查看,例如:

$ crontab -l
# 每分钟输出时间到文件 /tmp/test.txt
* * * * * echo `date` >> /tmp/text.txt

# 每隔2分钟同步一次互联网时间
*/2 * * * * /usr/bin/ntpstat time.windows.com > /dev/null 2>&1

如果想删除所有的crontab任务,你可以执行crontab -r命令。
配置crontab任务需要遵循crontab的时间格式,格式如下:

.---------------- 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    
|  |  |  |  |    
*  *  *  *  * <command to be executed>

可以看到,crontab只能精确到分钟,不能精确到秒。
下面是一些常用的crontab时间格式,你可以参考,来加深理解:


# 每分钟执行一次 <command>            
* * * * * <command> # * 代表所有可能的值

# 每隔一小时执行一次 <command>
* */1 * * * <command> # / 表示频率

# 每小时的 15 和 30 分各执行一次 <command>
15,45 * * * * <command> # , 表示并列

# 在每天上午 8- 11 时中间每小时 15,45 分各执行一次 <command>
15,45 8-11 * * * <command> # - 表示范围

# 每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行一次 <command>
3,15 8-11 * * 1 <command>

# 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行一次 <command>
3,15 8-11 */2 * * <command>

使用crontab执行周期/定时任务的优点是不用做任何开发,只需要配置crontab任务即可。至于缺点也很明显,主要有下面几个:

  • 不能精确到秒。
  • 需要手动编写可执行命令。这些执行命令跟项目分离,没办法复用项目提供的包、函数等能力。如果想执行跟项目关系密切的作业,开发起来不方便。
  • 单点,如果crond进程异常,周期/定时任务就没法继续执行。你可能说:可以在两台机器上配置并执行相同的周期/定时任务。但是这样做会有问题,因为两台机器同时执行相同的任务,可能会彼此造成冲突或状态不一致。
  • 没办法实现间隔任务或者间隔性定时任务。

标签:11,15,简介,crontab,任务,Linux,执行,crond
来源: https://www.cnblogs.com/w3liu/p/16217930.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有