当前位置: 首页 > news >正文

linux计划任务管理

文章目录

  • linux计划任务管理
    • 一次性计划任务
      • atd 服务
      • at命令
        • at -l或atq
        • at -c
        • at -d/-r 或 atrm
      • 限定用户
    • 用户周期性计划任务
      • crond 服务
      • crontab 命令
        • crontab -l
        • crontab -e
        • crontab -r
        • crontab -u
    • 系统周期性计划任务
      • /etc/crontab
      • /etc/cron.d
      • /etc/auacrontab

linux计划任务管理

一次性计划任务

一次性计划任务是指在未来某个时间点执行一个命令或一系列命令。

atd 服务

Linux 系统中at提供一次性计划任务功能。

at不是一个单独的工具,包括系统后台进程(atd)和一系列与后台进程atd交互的命令(例如at atq等等)。

[root@webapp ~ 14:07:48]# yum install -y at[root@webapp ~ 14:10:45]# systemctl start atd
[root@webapp ~ 14:10:59]# systemctl status atd
● atd.service - Job spooling toolsLoaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)Active: active (running) since 四 2025-09-18 14:10:59 CST; 4s agoMain PID: 10965 (atd)CGroup: /system.slice/atd.service└─10965 /usr/sbin/atd -f918 14:10:59 webapp.dyx.cloud systemd[1]: Started Job...
918 14:10:59 webapp.dyx.cloud atd[10966]: Starting jo...
Hint: Some lines were ellipsized, use -l to show in full.

at命令

[root@webapp ~ 14:33:20]# at --help
at: invalid option -- '-'
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...at [-V] [-q x] [-f file] [-mMlbv] -t timeat -c job ...atq [-V] [-q x]at [ -rd ] job ...atrm [-V] job ...batch
您在 /var/spool/mail/root 中有邮件

at命令从标准输入中读取要执行的命令。手动输入命令时,按ctrl+D完成输入。

[root@webapp ~ 16:54:06]# at 17:00
at> tar -cf etc.tar /etc
at> <EOT>
job 7 at Thu Sep 18 17:00:00 2025

输入完成,按ctrl+d完成。上面的字符’',就是安 ctrl+d 自动出现的。

如果输入错误,使用ctrl+backspace删除。

对于大量的命令或者错字敏感的命令,可以通过重定向和-f选项从脚本中读取.

[root@webapp ~ 16:57:24]# vim myscript.sh
[root@webapp ~ 16:59:13]# date >> /tmp/myscript.log
[root@webapp ~ 16:59:34]# vim /tmp/myscript.log
[root@webapp ~ 16:59:52]# cat /tmp/myscript.log
2025年 09月 18日 星期四 16:59:34 CST
[root@webapp ~ 17:00:28]# at now +5 minutes < myscript.sh
job 9 at Thu Sep 18 17:05:00 2025

timespec允许多种时间组合。例如,02:00 pm,15:43,或者teatime,后接日期或未来的天数。

示例:

  • now +5 hours
  • teatime tomorrow (teatime 16:00)
  • noon +4 days(noon 12:00)
  • 5 pm august 3 2016

时间定义参考文档/usr/share/doc/at/timespec

at -l或atq

查看任务队列。

[root@webapp ~ 14:36:33]# vim myscript.sh
[root@webapp ~ 14:37:48]# at now +5 minutes < myscript.sh
job 6 at Thu Sep 18 14:43:00 2025
[root@webapp ~ 14:38:13]# at -l
5	Thu Sep 18 14:41:00 2025 a root
6	Thu Sep 18 14:43:00 2025 a root
[root@webapp ~ 14:38:24]# atq
5	Thu Sep 18 14:41:00 2025 a root
6	Thu Sep 18 14:43:00 2025 a root

atd提供26个队列,a到z,排的越后优先级越低。使用at命令使用-q选项指定队列。

[root@webapp ~ 17:06:45]# at -q b 18:00 < myscript.sh
job 10 at Thu Sep 18 18:00:00 2025
[root@webapp ~ 17:07:32]# at -l
8	Thu Sep 18 18:00:00 2025 a root
10	Thu Sep 18 18:00:00 2025 b root[root@webapp ~ 17:07:35]# at -l -q b 
10	Thu Sep 18 18:00:00 2025 b root
at -c

查看任务详细信息。

[root@webapp ~ 17:10:10]# at -c 10
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=1; export XDG_SESSION_ID
... ...
}
${SHELL:-/bin/sh} << 'marcinDELIMITER2be62a9f'
#!/bin/bashmarcinDELIMITER2be62a9f
[root@webapp ~ 17:10:16]# 
at -d/-r 或 atrm

删除任务。

[root@webapp ~ 17:10:16]# at -l
8	Thu Sep 18 18:00:00 2025 a root
10	Thu Sep 18 18:00:00 2025 b root
[root@webapp ~ 17:11:15]# at -d 10
[root@webapp ~ 17:11:21]# at -l
8	Thu Sep 18 18:00:00 2025 a root

限定用户

/etc/at.allow 和 /etc/at.deny 控制哪些人可以使用atd服务。

匹配规则如下:

  1. 如果 /etc/at.allow 文件存在,只有该文件中提到的用户可以使用at服务。
  2. 如果/etc/at.allow文件不存在,只有/etc/at.deny文件中提到的用户禁止使用at服务。

查看当前配置:允许所有用户使用at服务。

[root@webapp ~ 17:11:23]# ls /etc/at.allow
ls: 无法访问/etc/at.allow: 没有那个文件或目录
[root@webapp ~ 17:12:42]# ls /etc/at.deny 
/etc/at.deny
[root@webapp ~ 17:12:51]# cat /etc/at.deny[root@webapp ~ 17:12:56]# 

用户周期性计划任务

周期性计划任务是指在未来的一些时间周期性地执行一个命令或一系列命令。

crond 服务

Linux 系统中cron 提供周期性计划任务功能。

cron包括系统后台进程(crond)、crontab 命令和多个配置文件。

用户可以使用 crontab 命令管理自己的周期性作业。

如果cron job运行的命令没有重定向 stdout 和 stderr,crond进程将通过邮件发送给job所有者。

crontab 命令

crontab -l

查看周期性计划任务

[root@webapp ~ 17:12:56]# crontab -l
#* * * * *
* * * * * date >> /tmp/cron.log
crontab -e

该命令默认使用vi编辑周期性计划任务:

  • 可以申明环境变量,格式为name=value,将影响声明之后的所有行。crontab使用的常规环境变量有SHELL和MAILTO。发送邮件需要额外的配置:mail服务器和smtp。
  • 空行是允许的。
  • 以#开头的行是注释行。
  • 每一行是一个job。

默认编辑器可以通过EDITOR环境变量设定。

每一个jobs包涵6个部分:五个时间和一个要执行的命令,按以下顺序显示:

  • 分钟
  • 小时
  • 几号
  • 月份
  • 星期几
  • 命令

前五个字段全部使用相同的语法规则:

  • *,表示“无关紧要”,始终。
  • 数字可用于指定分钟数或小时数、日期或者工作日。对于工作日,0表示星期日,1表示星期一,2表示星期二,依此类推。7也表示星期曰。
  • x-y:表示范围:x到y(含)。
  • x,y:表示列表。列表也可以包含范围,例如,5,10-13,17表示作业应当在每小时过去5分钟、10分钟、11分钟、12分钟、13分钟和17分钟后运行。
  • */x,表示x的时间间隔,例如列中的*/7表示每七分钟运行一次作业。
  • 最后一个区域是要执行的命令,命令通过/bin/sh执行,除非指定SHELL变量。如果命令中包涵未转义字符%,则表示开启新行,并且%后面所有字符作为标准输入。

月和周区域可以使用三字母简写单词,Jan,Feb,Mar和Mon,Tue。

周期性任务:

  1. 每天 1:00 备份 /etc目录 备份的名字要带当天日期。

  2. 每周六 23:00 备份 /usr/share/nginx 备份的名字要带当天日期。

    [root@webapp ~ 17:22:35]# export EDITOR=vim
    [root@webapp ~ 17:22:48]# crontab -e
    crontab: installing new crontab
    [root@webapp ~ 17:26:22]# crontab -l
    0 1 * * * tar -czf etc-$(%Y%m%d).tar.gz /etc
    0 23 * * * tar -czf nginx-$(%Y%m%d).tar.gz /usr/share/nginx
    
    1. 以下作业将在每年2月2日上午9点准点执行命令/usr/local/bin/yearly_backup
    0 9 2 2 * /usr/local/bin/yearly_backup
    
  3. 以下作业将在七月每周五的上午9点和下午4点间,每五分钟向该作业的所有者发送包含单词Chime的电子邮件。

    * 16-19 * 7 5 echo 'Chime'
    
  4. 以下作业将在每个工作日(周一到周五)上午9点执行mutt命令,从而将邮件消息Checkingin发送给收件人boss@example.com。

    * 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.
    

监控日志

tail -f [文件名]
crontab -r

删除所有周期性计划任务。

[root@webapp ~ 17:26:49]# crontab -r
[root@webapp ~ 17:33:13]# crontab -l
no crontab for root
crontab -u

root用户可以使用参数 -u username 管理其他用户周期性作业。

[root@webapp ~ 17:33:17]# crontab -u dyx -l
no crontab for dyx

系统周期性计划任务

系统管理员使用配置文件定义系统周期性作业。crond守护进程会从多个配置文件中读取系统周期性计划作业:

  • /etc/crontab
  • /etc/cron.d/ 目录
  • /etc/anacrontab

/etc/crontab

crond的配置文件比crontab命令定义的jobs多一个区域,在最后一个时间和command之间,指明使用哪个账户执行job。

[root@webapp ~ 17:34:02]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# 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

/etc/cron.d

系统周期性作业应始终在 /etc/cron.d/ 目录中创建自定义crontab文件,防止cronie更新后覆盖/etc/crontab文件。其他应用也会将系统周期性作业存放在该目录。

/etc/cron.d/0hourly定义了每小时要执行的任务: run-parts /etc/cron.hourly

作用:每小时将 /etc/cron.hourly目录下所有脚本按顺序执行一次。

[root@webapp ~ 17:36:37]# ls /etc/cron.d
0hourly  raid-check  sysstat
[root@webapp ~ 17:37:50]# cat /etc/cron.d/0hourly 
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

/etc/auacrontab

在过去,/etc/anacrontab 由单独的一个进程anacron处理,在CentOS 7 及后续版本中,这个文件也由 crond 进程处理,目的是确保重要的工作总是被执行,即使系统关机或者其他重大事故。

/etc/anacrontab 定义了每天、每周、每个月要运行的任务。

周期性执行任务目录:

  • 每天要执行的任务目录:/etc/cron.daily
  • 每周要执行的任务目录:/etc/cron.weekly
  • 每月要执行的任务目录:/etc/cron.monthly
[root@webapp ~ 17:38:00]# ls /etc/cron
cron.d/       cron.deny     cron.monthly/ cron.weekly/
cron.daily/   cron.hourly/  crontab       [root@webapp ~ 17:39:35]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22#period in days   delay in minutes   job-identifier   command
1	5	cron.daily		nice run-parts /etc/cron.daily
7	25	cron.weekly		nice run-parts /etc/cron.weekly
@monthly 45	cron.monthly		nice run-parts /etc/cron.monthly

/etc/anacrontab 使用语法 NAME=value 配置 anacrontab。

例如,START_HOURS_RANGE=3-22,作业只能在此时间段运行。

/etc/anacrontab 每行包涵4个区域:

  • period in days,按重复计划运行的作业的间隔天数。该字段接受整数或宏作为值。例如,宏@daily相当于整数1,它表示每天执行该作业。同样,宏@weekly相当于整数7,它表示每周执行该作业。
  • delay in minutes,在启动该作业前,crond守护进程应等待的时间。
  • job-identifier,此为/var/spool/anacron中的文件名称,用于检查该作业是否已运行。
  • command,要执行的命令。
http://www.dtcms.com/a/388943.html

相关文章:

  • excel文件导入+存储过程导入表到业务表
  • Chromium 138 编译指南 macOS 篇:构建配置与编译优化(五)
  • 基于Java与Vue的MES生产制造管理系统,实现生产流程数字化管控,涵盖计划排程、质量追溯、设备监控等功能模块,提供完整源码支持二次开发,助力智能制造升级
  • 人工智能基础:从感知机到神经网络核心知识整合​
  • 电子制造设备中螺杆支撑座如何保障精度与质量控制?
  • 东莞精密制造工厂6人共用一台服务器做SolidWorks设计
  • 智能科学与技术专业毕业设计选题推荐:计算机视觉与自然语言处理
  • 基于STM32F103C8T6与HC-08蓝牙模块实现手机连接方案
  • OpenCV 4.12.0源码解析:核心模块原理与实战应用
  • PyTorch 与 TensorFlow 的深度对比分析
  • 怀旧电玩游戏ROM合集 50T模拟器游戏资源分享
  • MacCAD2019.dmg 安装包使用教程|Mac电脑安装CAD2019全流程
  • IP失效,溯源无门:微隔离如何破局容器环境下“黑域名”攻击溯源难题!
  • 基于dify做聊天查询的智能体(一)
  • 关于 C 语言 编程语言常见问题及技术要点的说明​
  • Chromium 138 编译指南 macOS 篇:高级优化与调试技术(六)
  • word:快捷键:Delete、BACKSPACE、INSERT键?
  • PromptPilot 产品发布:火山引擎助力AI提示词优化的新利器
  • rust编写web服务11-原生Socket与TCP通信
  • DevOps平台建设 - 总体设计文档驱动下的全流程自动化与创新实践
  • Spring Cloud中配置多个 Kafka 实例的示例
  • 从零开始手写机器学习框架:我的深度学习之旅——核心原理解密与手写实现
  • 有方向的微小目标检测
  • 【office】如何让word每一章都单独成一页
  • git安装教程+IDEA集成+客户端命令全面讲解
  • rsync带账号密码
  • rust语言项目实战:生成双色球、大乐透所有玩法的所有数字组合(逐行注释)
  • 远程配置服务器 ubuntu22.04 里的 docker 的x11
  • rust编写web服务03-错误处理与响应封装
  • Docker基础篇07:Docker容器数据卷