news 2026/4/6 22:13:30

Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04中的任务计划详解(16)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04中的任务计划详解(16)

Ubuntu 22.04中的任务计划详解

任务计划(或称为作业调度)是系统管理中不可或缺的一部分,它允许我们在指定的时间或周期性地自动执行命令或脚本,从而实现自动化运维。Ubuntu 22.04主要提供了两种任务计划工具:at(用于执行一次性任务)和cron(用于执行周期性任务)。

1. 简单的定时at命令

at命令用于安排一个任务在未来的某个特定时间点执行一次。执行完毕后,该任务便会从队列中消失。

1.1at命令的使用

知识点:
在使用at之前,需要确保atd服务(atdaemon)正在运行。该服务负责读取并执行at队列中的任务。
安装部署与详细步骤:
步骤 1: 安装并启动atd服务
at命令通常默认已安装,但atd服务可能未启动。

# 安装 at 软件包(如果未安装)$sudoaptupdate $sudoaptinstallat# 启动 atd 服务$sudosystemctl start atd# 设置 atd 服务开机自启$sudosystemctlenableatd# 检查 atd 服务状态$sudosystemctl status atd# 应该看到 "active (running)" 的字样

步骤 2:at命令的语法与使用方法
语法知识点:
at的时间指定方式非常灵活:

  • 绝对时间:HH:MM(如17:00),MMDDYY,MM/DD/YY,DD.MM.YY
  • 相对时间:now + <时间单位>(如now + 5 minutes,tomorrow,next week)
  • 特殊时间:midnight(午夜),noon(中午),teatime(下午4点)
    案例代码:
    案例 1: 交互式添加任务
# 在今天下午5点整,发送一个提醒$ at17:00# warning: commands will be executed using /bin/sh# at> echo "该去开会了!" | mail -s "会议提醒" your_email@example.com# at> <EOT> # 按下 Ctrl+D 结束输入# job 3 at Tue May 21 17:00:00 2024# "job 3" 是任务编号

案例 2: 通过管道添加任务

# 在1分钟后,创建一个包含当前日期和时间的文件$echo"date > /tmp/current_time.txt"|at now +1minute# 在明天午夜,执行一个备份脚本$echo"/home/user/scripts/backup.sh"|at midnight

案例 3: 从文件读取任务
如果任务很复杂,可以将其写入脚本文件,然后让at执行该脚本。

# 创建一个任务脚本$nanomy_at_task.sh# --- 文件内容 ---# #!/bin/bash# tar -czf /backups/home_$(date +\%F).tar.gz /home# echo "备份完成: /backups/home_$(date +\%F).tar.gz" | mail -s "备份成功" your_email@example.com# --- 文件结束 ---# 让at在明天凌晨3点执行这个脚本$ at-fmy_at_task.sh 03:00 tomorrow# -f 选项后跟脚本文件名

步骤 3: 管理at任务

# 查看待执行的 at 任务队列$ atq# 或 at -l# 输出示例:# 3 Tue May 21 17:00:00 2024 a user# 4 Wed May 22 03:00:00 2024 a user# 格式: [任务号] [执行时间] [队列] [用户]# 删除一个待执行的任务 (使用任务号)$ atrm3# 或 at -d 3# 再次查看,任务3已被删除$ atq# 4 Wed May 22 03:00:00 2024 a user
1.2 定时备份系统文件

这是一个at命令的典型应用场景。
安装部署与详细步骤:
步骤 1: 创建备份脚本

# 创建一个目录存放脚本$mkdir-p~/scripts $nano~/scripts/system_backup.sh

案例代码 (~/scripts/system_backup.sh):

#!/bin/bash# 定义备份目录和源目录BACKUP_DIR="/var/backups/manual"SOURCE_DIR="/etc"DATE=$(date+%F_%H-%M-%S)# 创建备份目录(如果不存在)mkdir-p"$BACKUP_DIR"# 执行备份,使用tar打包并压缩# -c: 创建, -z: gzip压缩, -f: 指定文件名, -p: 保留权限tar-czpf"$BACKUP_DIR/etc_backup_$DATE.tar.gz""$SOURCE_DIR"# 检查上一条命令是否成功if[$?-eq0];thenecho"系统配置文件备份成功:$BACKUP_DIR/etc_backup_$DATE.tar.gz"elseecho"备份失败!">&2# 将错误信息输出到标准错误fi

步骤 2: 给脚本添加执行权限

$chmod+x ~/scripts/system_backup.sh

步骤 3: 使用at安排备份任务

# 安排在今晚11点执行备份$ at-f~/scripts/system_backup.sh23:00

2. 控制计划任务的命令crontab

cron是一个用于执行周期性任务的守护进程。crontab命令则是用来管理每个用户的cron任务列表(即 crontab 文件)的工具。

2.1crontab的原理

知识点:

  • cron守护进程 (crond) 在系统启动时自动运行,每分钟都会检查一次/etc/crontab文件以及/var/spool/cron/crontabs/目录下的文件。
  • /var/spool/cron/crontabs/目录中,每个用户都有一个以自己用户名命名的文件,该文件记录了该用户的所有cron任务。
  • crontab命令就是用来编辑这些文件的,避免了直接修改带来的语法错误风险。
2.2crontab的使用

语法知识点:
crontab命令的常用选项:

  • crontab -e: 编辑当前用户的crontab文件。首次使用会提示选择编辑器(如nano)。
  • crontab -l: 列出当前用户的所有cron任务。
  • crontab -r: 删除当前用户的所有cron任务(慎用!)。
  • crontab -u <用户名> -e: 以root身份编辑指定用户的crontab文件。
    cron任务的时间格式(核心知识点):
    一个cron任务行由6个字段组成,前5个是时间字段,最后一个是命令。
.---------------- 分钟 (0 - 59) | .------------- 小时 (0 - 23) | | .---------- 日 (1 - 31) | | | .------- 月 (1 - 12) | | | | .---- 星期 (0 - 6) (星期0=星期天) | | | | | * * * * * 要执行的命令

特殊字符:

  • *: 任意值。例如,在分钟字段使用*表示每分钟。
  • ,: 分隔多个值。例如,1,3,5在小时字段表示第1、3、5小时。
  • -: 表示范围。例如,1-5在星期字段表示星期一到星期五。
  • /: 表示步长。例如,*/10在分钟字段表示每10分钟。
    案例代码:
    案例 1: 编辑和管理crontab
# 编辑当前用户的cron任务$crontab-e# 当第一次运行时,可能会出现以下提示:# no crontab for user - using an empty one# Select an editor. To change later, run 'select-editor'.# 1. /bin/nano <---- easiest# 2. /usr/bin/vim.basic# 3. /usr/bin/vim.tiny# 4. /bin/ed# Choose 1-4 [1]: 1 # 选择1(nano)# 列出当前用户的cron任务$crontab-l# 删除当前用户的所有cron任务 (会要求确认)$crontab-r

案例 2: 添加具体的周期性任务
crontab -e打开的编辑器中,添加以下行:

# 每15分钟同步一次时间*/15 * * * * /usr/sbin/ntpdate-stime.nist.gov# 每天凌晨2点30分,执行备份脚本302* * * /home/user/scripts/system_backup.sh>>/var/log/my_backup.log2>&1# 每周一上午9点,发送一封周报邮件09* *1mail-s"周报"manager@example.com</home/user/weekly_report.txt# 每月的1号和15号,清空/tmp目录下的临时文件 (谨慎使用)001,15* *find/tmp-typef-atime+7-delete# 每小时的第5分钟,检查磁盘空间5* * * *df-h|mail-s"磁盘空间报告"admin@example.com

注释:

  • >> /var/log/my_backup.log 2>&1: 这是一个非常重要的重定向。
    • >>: 将标准输出追加到日志文件。
    • 2>&1: 将标准错误也重定向到标准输出,这样错误信息也会被写入日志文件。
  • mail -s "主题" 收件人 < 文件: 将文件内容作为邮件正文发送。
2.3 任务配置文件介绍

除了用户自己的crontab文件,还有系统级的cron配置文件。
知识点:

  • /etc/crontab: 系统主cron配置文件。它和用户crontab文件格式略有不同,多了一个“用户”字段。

    # /etc/crontab: system-wide crontab # ... (注释) SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # ... (其他环境变量) # # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    • run-parts: 一个命令,它会执行指定目录下的所有可执行脚本。
    • 这意味着,你可以把需要每天、每周、每月执行的脚本分别放到/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下,系统会自动执行。
  • /etc/cron.d/: 这个目录用于存放系统级的cron任务文件。你可以在这里创建一个新的配置文件,格式和/etc/crontab一样,需要指定用户。这比直接修改/etc/crontab更规范。

  • /etc/cron.allow/etc/cron.deny:

    • 这两个文件用于控制哪些用户可以使用crontab命令。
    • 如果cron.allow存在,只有列在其中的用户才能使用crontabcron.deny被忽略)。
    • 如果cron.allow不存在,但cron.deny存在,则除了列在cron.deny中的用户外,其他用户都可以使用crontab
    • 如果两个文件都不存在,只有root用户可以使用crontab(在Ubuntu等Debian系系统中,默认允许所有用户使用)。

3. 小结

本章详细介绍了Ubuntu 22.04中两种核心的任务计划工具:atcrontab

  • at命令:简单直观,非常适合安排一次性的未来任务,如延迟执行、定时提醒等。关键在于掌握其灵活的时间指定方法和任务队列管理(atq,atrm)。
  • crontab命令:功能强大,是实现周期性自动化任务的标准工具。核心在于理解其五字段时间格式的语法,并学会正确地重定向输出和错误。同时,了解系统级的配置文件(/etc/crontab,/etc/cron.d/)和目录(/etc/cron.daily)有助于更好地管理整个系统的自动化任务。
    合理运用atcron,可以将系统管理员从重复、琐碎的日常工作中解放出来,极大地提高工作效率和系统的可靠性。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 20:32:21

KAT-Dev-FP8:企业级AI编程助手的终极部署指南

KAT-Dev-FP8&#xff1a;企业级AI编程助手的终极部署指南 【免费下载链接】KAT-Dev-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Kwaipilot/KAT-Dev-FP8 企业技术决策者的成本困境 在当前数字化转型浪潮中&#xff0c;技术团队面临着一个严峻的现实&#xff1a;…

作者头像 李华
网站建设 2026/4/4 10:58:01

ATOLL 3.1.0 LTE仿真软件:从入门到精通的完整指南

突破通信网络规划瓶颈&#xff0c;掌握专业仿真技能 【免费下载链接】ATOLL仿真软件教程下载 ATOLL仿真软件教程为通信网络规划和仿真领域的专业人士和学者提供了全面指导。本教程基于ATOLL 3.1.0版本&#xff0c;采用中文编写&#xff0c;详细介绍了LTE网络规划中的各项功能与…

作者头像 李华
网站建设 2026/3/31 5:35:41

MyBatisPlus缓存命中统计信息用VoxCPM-1.5-TTS-WEB-UI语音输出

MyBatisPlus缓存命中统计信息用VoxCPM-1.5-TTS-WEB-UI语音输出 在现代后端系统中&#xff0c;数据库访问的性能优化早已不是单纯的“加索引、调SQL”那么简单。随着微服务架构和高并发场景的普及&#xff0c;缓存成了支撑系统稳定运行的关键一环。而在Java生态里&#xff0c;My…

作者头像 李华
网站建设 2026/4/5 9:40:53

如何用C语言打造军工级稳定的TPU固件?这4个技术要点必须掌握

第一章&#xff1a;TPU固件开发的稳定性挑战TPU&#xff08;张量处理单元&#xff09;固件在AI加速计算中承担着底层资源调度与硬件控制的核心职责。其稳定性直接影响模型推理的准确性与系统整体的可靠性。由于TPU运行在高度并行且低延迟的环境中&#xff0c;任何微小的时序偏差…

作者头像 李华
网站建设 2026/4/1 17:21:18

揭秘PyTorch显存瓶颈:如何用3种策略将GPU内存降低70%

第一章&#xff1a;PyTorch显存优化的核心挑战在深度学习模型训练过程中&#xff0c;GPU显存管理成为制约模型规模与训练效率的关键因素。PyTorch作为主流的深度学习框架&#xff0c;虽然提供了灵活的动态计算图机制&#xff0c;但也带来了显存使用不可预测、临时变量堆积等问题…

作者头像 李华