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

linux的例行性工作——计划任务

第一章 Linux的例行性工作1.1 应用场景生活中我们有太多场景需要使用到闹钟比如早上 7 点起床下午 4 点开会晚上 8 点购物等等。在 Linux 系统里我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器或者在晚上 10 点确认系统状态等等。但我们不可能一直守在电脑前毕竟我们也需要下班/睡觉而且即使在上班期间如果到点了还需要人工操作未免效率太低了。所以计划任务应运而生。通过设置计划任务可以让服务器在指定时间执行指定命令。1.2 单一执行的例行性任务–at一次性1.2.1 安装at命令需要安装[rootserver ~]# yum install at -y[rootserver ~]# at -V # 大写Vat version3.2.2启动服务[rootserver ~]# systemctl start atd[rootserver ~]# systemctl enable --now atd # 设置开机启动[rootserver ~]# systemctl status atd # 查看状态1.2.2 at命令详解at命令执行过程第一步寻找/etc/at.allow 白名单是否存在写在该文件中用户才可执行at命令第二步若/etc/at.allow不存在则寻找/etc/at.deny(黑名单)文件写在该文件中的用户不能使用at命令第三步若两个文件都不存在则只有root用户可以使用at命令当用户使用at 新建工作之后该项工作就会被记录到 /var/spool/at/目录里面。at 执行的每一项工作都会被记录到 /var/log/cron 这个日志文件中。格式at -参数 日期时间-m当任务完成后即使没有标准输出也会给用户发送邮件 -l列出系统上所有用户的at任务等价于atq -d删除或取消一个任务 -v使用时间格式列出at任务 -c可以列出任务之后的命令内容 -f从文件中读取时间格式参数说明HH:MM在今天HH小时的MM分钟执行若时间点错过将在明天执行HH:MM YYYY-MM-DD规定在某年某月的某一天的特殊时刻执行该工作now 2 minutes从现在开始的minutes、hours、days、weeks执行1.2.3 实验实验1延迟执行ls /root ,并将结果写入到at.txt中[rootserver ~]# at now 2 minuteswarning: commands will be executed using /bin/sh atls/root/root/at.txt atEOT# 点击ctrld 结束交互性界面[rootserver ~]# at -l # 查看已存在的计划任务3Thu May2514:17:002023a root[rootserver ~]# atq # 同上3Thu May2514:17:002023a root注意at命令只要指定的时间正确就可以执行对应的命令at命令的输出结果不会显示到屏幕上at命令中执行的命令最好使用绝对路径不容易报错at命令只会执行一次实验2不使用交互性命令实现通过管道符命令执行[rootserver ~]# echo echo hello again /root/at.txt | at now 1 minute实验3设置某账户at命令不可用[rootserver ~]# useradd ce1 # 新建账户[rootserver ~]# passwd ce1 # 设置密码更改用户 ce1 的密码 。 新的密码# 123无效的密码 密码少于8个字符 重新输入新的密码# 123passwd所有的身份验证令牌已经成功更新。[rootserver ~]# tail -1 /etc/passwd # 倒叙查看账户管理文件ce1:x:1001:1001::/home/ce1:/bin/bash[rootserver ~]# vim /etc/at.deny # 设置黑名单ce1# 输入[rootserver ~]# su - ce1 # 切换账户[ce1server ~]$ at14:36# 测试at命令不可用Youdonot have permission to use at.监控at任务文件[rootserver ~]# watch -n 1 ls -l /var/spool/at查看任务执行日志[rootrhel93 ~]# tail -f /var/log/cron1.3 循环执行的例行性任务–crontab周期性1.3.1 安装at命令是在指定的时间只能执行一次任务crontab命令可以循环重复的执行定时任务crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程在安装完成操作系统后默认会安装 crond 服务工具且 crond 服务默认就是自启动的若需要安装则执行如下命令[rootserver ~]# yum install crontabs # 安装注意包名[rootserver ~]# systemctl status crond # 查看状态crond 进程每分钟会定期检查是否有要执行的任务如果有则会自动执行该任务crontab 命令需要 crond 服务支持linux 任务调度的工作主要分为以下两类系统执行的工作****系统周期性所要执行的工作如备份系统数据、清理缓存个人执行的工作某个用户定期要做的工作例如每隔 10 分钟检查邮件服务器是否有新信这些工作可由每个用户自行设置1.3.2 crontab工作过程当系统中有 /etc/cron.allow 文件时只有写入此文件的用户可以使用 crontab 命令没有写入的用户不能使用 crontab 命令。同样如果有此文件/etc/cron.deny 文件会被忽略因为 /etc/cron.allow 文件的优先级更高。当系统中只有 /etc/cron.deny 文件时写入此文件的用户不能使用 crontab 命令没有写入文件的用户可以使用 crontab 命令。当用户使用 crontab 新建工作之后该项工作就会被记录到 /var/spool/cron/目录里面系统级别的工作需要写在/etc/crontab。crontab 执行的每一项工作都会被记录到 /var/log/cron 这个日志文件中。1.3.3 crontab命令详解格式crontab[-u user][-l|-r|-e]参数解释示例-llist 查看定时任务crontab -l-eedit 编辑定时任务建议手动编辑crontab -e-i删除定时任务提示用户确认删除避免出错crontab -i-r删除定时任务移除/var/spool/cron/username文件crontab -r-u user指定用户执行任务root 可以管理普通用户计划任务crontab -u redhat -l执行crontab 命令就是在修改/var/spool/cron中的定时任务文件。编辑crontab[rootserver ~]# crontab -e写入的命令格式每一行书写一个工作每个工作共有6个字段#示例*/56-8 *81/bin/bash /test.sh代表意义分钟小时日期月份星期命令数字范围0-590-231-311-120-70和7表示周日执行的动作时间格式中的特殊字符含义*任意时刻-表示时间范围逗号分割时段*/数字指定时间间隔的频率如每3分钟执行一次*/3例时间含义1 2 * * *每天凌晨2点零1分执行动作0 17 * * 1每周一下午17点整执行动作0 5 1,15 * *每月的1号和15号凌晨5点执行动作40 4 * * 1-5每周1到周5的凌晨4点40分执行动作*/10 4 * * *每天凌晨4点每隔10分钟执行动作3,15 8-11 */2 * *每隔2天的上午8点到11点的第3分钟和第15分钟执行动作* * * * *每1分钟执行一次动作[!Warning]6 个字段都不能为空如果不确定时间则使用*表示任意时间crontab命令任务的最小时间单位为分钟最大有效时间为月定义时间时日期和星期最好不要一起出现由于都是以天为单位会让管理员混淆在定时任务中不管是写命令还是在脚本中写命令最好都用绝对路径相对路径有可能会因为找不到命令而报错1.3.4 实验实验4设置循环周期性任务[rootserver ~]# crontab -e*/2 * * * * wall$(date)注意crond服务是自动启动的crontab命令只要保存退出后就会生效查看任务[rootmaster ~]# crontab -l*/2 * * * * wall$(date)删除任务[rootserver ~]# crontab -r # 删除[rootserver ~]# crontab -l # 查看列表nocrontabforroot实验5让系统在每周1凌晨6点重启一次[rootserver ~]# crontab -e06* *1/sbin/shutdown-rnow实验6设置邮件发送告警功能每1分钟发送一封邮件登录qq邮箱打开账号与安全生成授权码后复制授权码#linux上安装邮件客户端[rootserver ~]# yum install s-nail -y#在文件的最后添加如下内容[rootserver ~]# vim /etc/s-nail.rcsetv15-compatsetfrom账号名qq.com#账号名写自己的setmtasmtps://qq号:授权码smtp.qq.com:465#如果是qq账号则端口号465如果是163邮箱账号端口号25或者587setsmtp-authlogin#测试[rootserver ~]# echo test-mail | s-nail -s test 账号名qq.com#登录自己的邮箱账号查看是否收到邮件设置定时任务[rootserver ~]# crontab -e* * * * *echo警告SERVER服务器内存较低速处理|s-nail-s告警邮件zhanghaomingqq.com1.3.5 系统级别的计划任务crond 服务除了会在工作时查看/var/spool/cron文件夹下的定时任务文件以外还会查看/etc/cron.d目录中的任务。在/etc/anacrontab文件里面定义了每天、每周、每月需要执行的系统任务。[rootmaster01 ~]# ll /etc/cron.d/0hourly-rw-r--r--.1root root1287月112022/etc/cron.d/0hourly[rootmaster01 ~]# cat /etc/cron.d/0hourly# Run the hourly jobsSHELL/bin/bashPATH/sbin:/bin:/usr/sbin:/usr/binMAILTOroot 01 * * * * root run-parts /etc/cron.hourly[rootmaster01 ~]# cat /etc/anacrontab# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL/bin/shPATH/sbin:/bin:/usr/sbin:/usr/binMAILTOroot# the maximal random delay added to the base delay of the jobsRANDOM_DELAY45# the jobs will be started during the following hours onlySTART_HOURS_RANGE3-22#period in days delay in minutes job-identifier command15cron.dailynicerun-parts /etc/cron.daily#每天延迟5分钟执行/etc/cron.daily/目录中的所有脚本725cron.weeklynicerun-parts /etc/cron.weekly#每7天延迟25分钟执行/etc/cron.weekly目录中的所有脚本monthly45cron.monthlynicerun-parts /etc/cron.monthly#每月延迟45分钟执行/etc/cron.monthly目录中的所有脚本[rootserver ~]# ls -l /etc/ | grep cron*cron.d# 系统定时任务cron.daily# 每天的任务cron.deny# 定时任务黑名单cron.hourly# 每小时执行的任务cron.monthly# 每月的定时任务crontab# 定义系统级别的计划任务cron.weekly# 每周的定时任务crontab -e 是每个用户都可以执行的命令即每个用户自定义的计划任务但有时定时任务必须由系统执行此时就需要编辑/etc/crontab配置文件来实现。[rootserver ~]# vim /etc/crontab系统级计划任务仅能通过root定义在/etc/crontab 最后一行新增计划任务即可SHELL/bin/bash#指定系统使用哪个命令解释器PATH/sbin:/bin:/usr/sbin:/usr/bin#系统执行命令的搜索路径MAILTOroot# 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) (Sunday0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed例1每周二11点将时间写入/t1.txt文件中[rootserver ~]# vim /etc/crontab011* *2rootdate/t1.txt例2每天6:00点将日志/var/log/messages 文件备份到/backup目录中备份后的日志文件名修改为logfileYYYY-MM-DD[rootserver ~]# mkdir /backup # 新建目录[rootserver ~]# vim /etc/crontab # 编辑系统计划任务06* * * root /bin/cp /var/log/messages /backup/logfile$(date\%Y-\%m-\%d)# 注意可以使用* * * * * 进行测试# $() 表示将引起的内容识别为命令也可以使用反引号【不是单引号】# 在crontab系统中%表示换行需要增加转义符\拓展当需要同一时间执行多个脚本时可以将这多个脚本放在一个目录下然后使用run-parts来执行。#run-parts该命令可将后面接的“目录”内的所有文件找出来执行。#假设我的所有脚本放在/text目录下现在要使用root用户每天都执行一下这个目录下的脚本写法为[rootlocalhost ~]# vim /etc/crontab08* * * root run-parts /text
http://www.gsyq.cn/news/1340173.html

相关文章:

  • BWH Hotels 6个月暗线入侵:全球4000+酒店预订系统沦陷的技术复盘与行业警示
  • 变频器厂家常见问题解答(2026最新专家版) - 资讯纵览
  • 2026年雨水收集模块品牌推荐:全场景适配头部品牌综合测评 - 资讯纵览
  • 想试AI做千川素材又怕花冤枉钱?易元AI“千川专版”免费生成50条,跑量再付费
  • 如何在浏览器中快速构建专业的BIM查看器:xeokit-bim-viewer终极指南
  • 用树莓派+USB摄像头+总线舵机,手把手教你做个能自动抓取小球的机械臂(附完整Python代码)
  • IDEA 如何设置保存时自动去除无用导入和格式化代码?
  • IPPE数据传输APO--传输PDS到APO
  • egrep、sed、awk 简介与用法
  • Redis Cluster模式与优化
  • 从零到出版级作品,包豪斯风格AI绘图全流程拆解,含12个可复用提示模板与字体/网格参数表
  • 论文降AI效果红黑榜,2026年5月最新实测! - 我要发一区
  • 【Midjourney纹理生成高阶秘籍】:20年AI视觉工程师亲授5大不可外传的材质控制法则
  • 微信投票制作平台哪个好用?免费投票工具推荐 - 资讯纵览
  • 长期使用后回顾 Taotoken 在 API 调用稳定性与客服响应上的综合体验
  • Taotoken 多模型聚合平台助力智能数据分析与建模工作流
  • STM32电容触摸按键灵敏度调不好?从tpad_scan函数源码带你分析点按与连按的逻辑
  • 2026年RPA机器人流程自动化实施指南:全流程落地适配
  • RecurDyn仿真数据流转全攻略:从AKISPL函数创建到CSV结果导出与对比
  • 618下半程冲刺!易元AI“全域推广内容弹药库”限时开放:千套模板+素材包免费领,前200名还送诊断
  • 终极全网页截图方案:告别滚动拼接的Chrome插件神器
  • LLM+工具链 vs 多模态:解析非文本输入的终极选择,哪种方案更适合你?
  • SDR++软件无线电:3个关键步骤让你轻松探索无线电频谱世界
  • 商旅平台哪个好?基于真实用户反馈的2026商旅平台排行与选型建议(最新版) - 资讯纵览
  • 太初元碁洪源:异构计算能力将成为未来AI算力基础设施的重要方向|AIGC2026
  • JBoltAI三步走:散数据怎么变AI知识资产
  • 采购价格波动,AI Agent能帮上多大忙?
  • 2026闭眼入!5款AI论文工具实测,解决内耗焦虑,论文速成不熬夜!
  • 3步掌握FModel:解锁虚幻引擎游戏资源的终极指南
  • 5分钟快速上手:html-to-docx终极HTML转Word解决方案