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

Linux 计划任务管理

一次性计划任务

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

atd 服务

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

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

# 使用以下命令安装[root@centos7 ~]# yum install at# 确认atd服务开机启动[root@centos7 ~]# systemctl status atd[root@server ~ 11:07:56]# at 11:10at> echo hello > /var/log/myat.logat> date >> /var/log/myat.logat> <EOT>  #ctrl+d退出​[root@server ~ 11:09:37]# cat /var/log/myat.loghello2025年 07月 31日 星期四 11:10:00 CST您在 /var/spool/mail/root 中有新邮件​hhh​

at 命令

语法:

at <timespec> 

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

示例:

[root@centos7 ~]# at now +5 minutesat> echo hello world > /tmp/hello.logat> <EOT>job 1 at Wed Dec 21 17:09:00 2022

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

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

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

[root@centos7 ~]# vim myscript.sh#!/bin/bashdate >> /tmp/myscript.logecho hello myscript >> /tmp/myscript.log[root@centos7 ~]# at now +5 minutes < myscript.sh job 2 at Wed Dec 21 17:10:00 2022[root@centos7 ~]# at now +100 minutes -f myscript.sh job 3 at Wed Dec 21 18:46:00 2022

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@centos7 ~]# at -l1   Wed Dec 21 17:09:00 2022 a root2   Wed Dec 21 17:10:00 2022 a root3   Wed Dec 21 18:46:00 2022 a root​[root@centos7 ~]# atq1   Wed Dec 21 17:09:00 2022 a root2   Wed Dec 21 17:10:00 2022 a root3   Wed Dec 21 18:46:00 2022 a root

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

[root@centos7 ~]# at -q b now +5 minutes < myscript.shjob 4 at Wed Dec 21 17:11:00 2022[root@centos7 ~]# atq1   Wed Dec 21 17:09:00 2022 a root2   Wed Dec 21 17:10:00 2022 a root3   Wed Dec 21 18:46:00 2022 a root4   Wed Dec 21 17:11:00 2022 b root[root@centos7 ~]# at -l -q b4   Wed Dec 21 17:11:00 2022 b root​# 时间到达后检测[root@centos7 ~]# atq3   Wed Dec 21 18:46:00 2022 a root​[root@centos7 ~]# cat /tmp/hello.log hello world​[root@centos7 ~]# cat /tmp/myscript.log Wed Dec 21 17:10:01 CST 2022hello myscriptWed Dec 21 17:11:00 CST 2022hello myscript

at -c

查看任务详细信息

[root@centos7 ~]# at -c 3......${SHELL:-/bin/sh} << 'marcinDELIMITER4bf95eea'#!/bin/bashdate >> /tmp/myscript.logecho hello myscript >> /tmp/myscript.log​marcinDELIMITER4bf95eea

at -d/-r 或 atrm

删除任务

[root@centos7 ~]# atrm 3[root@centos7 ~]# atq
限定用户

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

匹配规则如下:

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

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

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

[root@centos7 ~]# ls /etc/at.*/etc/at.deny[root@centos7 ~]# cat /etc/at.deny 

用户周期性计划任务

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

crond 服务

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

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

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

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

crontab 命令

crontab -l

查看周期性计划任务。

#查看周期性计划任务[root@server ~ 11:15:02]# crontab -lno crontab for root​

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。

示例

#以下作业将在每年7月31日上午11:36执行date命令写入/var/log/date.log[root@server ~ 11:36:05]# crontab -e36 11 31 7 * date >> /var/log/date.log​#以下作业将在七月每周五的上午9点和下午4点间,每五分钟向该作业的所有者发送包含单词hhh的电子邮件*/5 10-12 * Jul 4 echo "hhh"​[root@server ~ 11:39:55]# crontab -l36 11 31 7 * date >> /var/log/date.log*/5 10-12 * Jul 4 echo "hhh"您在 /var/spool/mail/root 中有新邮件[root@server ~ 11:42:57]# cat /var/spool/mail/rootDate: Thu, 31 Jul 2025 11:40:02 +0800 (CST)​hhh​​#以下作业将在每个工作日20:00钟运行/usr/local/bin/daily_report。0 20 * * 1-5 /var/log/date.log​#以下作业将在每个工作日(周一到周五)上午9点执行mutt命令,从而将邮件消息Checkingin发送给收件人boss@example.com。0 9 * * 1-5 mutt -s "good day" boss@example.com % Hi boss, just checking in.

crontab -r

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

[lyk@centos7 ~]$ crontab -r[lyk@centos7 ~]$ crontab -lno crontab for lyk

crontab -u

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

[root@centos7 ~]# crontab -u lyk -l0 9 2 2 * /usr/local/bin/yearly_backup0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.​[root@centos7 ~]# crontab -u lyk -r[root@centos7 ~]# crontab -u lyk -lno crontab for lyk

crontab filename

还可以使用crontab filename 命令从文件 filename 中读取的作业并替换当前所有作业。

[lyk@centos7 ~]$ vim mycron0 9 2 2 * /usr/local/bin/yearly_backup0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.​[lyk@centos7 ~]$ crontab mycron[lyk@centos7 ~]$ crontab -l0 9 2 2 * /usr/local/bin/yearly_backup0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi boss, just checking in.
http://www.xdnf.cn/news/16672.html

相关文章:

  • 【n8n】如何跟着AI学习n8n【03】:HTTPRequest节点、Webhook节点、SMTP节点、mysql节点
  • AI IDE+AI 辅助编程-生成的大纲-一般般
  • Visual Studio调试技巧与函数递归详解
  • mac环境配置rust
  • rabbitmq的安装和使用-windows版本
  • python基础语法3,组合数据类型(简单易上手的python语法教学)(课后习题)
  • 前端 vue 第三方工具包详解-小白版
  • 云原生环境 DDoS 防护:容器化架构下的流量管控与弹性应对
  • C++语言的发展历程、核心特性与学习指南
  • #C语言——刷题攻略:牛客编程入门训练(一):简单输出、基本类型
  • 量子安全:微算法科技(MLGO)基于比特币的非对称共识链算法引领数字经济未来
  • XPATH选择器常用语法
  • 磁盘坏道检测工具在美国服务器硬件维护中的使用规范
  • 云原生运维与混合云运维:如何选择及 Wisdom SSH 的应用
  • 从“碎片化”到“完美重组”:IP报文的分片艺术
  • 计算机视觉CS231n学习(1)
  • 网络编程学习
  • UE5保姆级新手教程第六章(角色互动)
  • python的异步、并发开发
  • 关于项目的一些完善功能
  • C语言:函数指针、二级指针、常量指针常量、野指针
  • 基于deepseek的事件穿透分析-风险传导图谱
  • Linux系统编程Day1-- 免费云服务器获取以及登录操作
  • 分层解耦(Controller,Service,Dao)
  • [Agent开发平台] API网关 | 业务领域 | DTO格式 | 分页令牌
  • 当人生低谷无人帮助时,如何独自奏响人生乐章
  • Abaqus2022下载与保姆级安装教程!!
  • 人工智能通信协议三种协议:MCP协议、A2A协议、AG-UI协议是什么
  • spark入门-helloword
  • CMS框架GetShell