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

LINUX——例行性工作

 单一执行的例行性工作

仅处理一次的工作,可用于在特定时间执行工作

  1. at命令的工作过程

    • at命令使用时的权限控制:通过两个文件/etc/at.allow/etc/at.deny来控制哪些用户可以使用at命令。如果这两个文件都不存在,那么只有root用户可以使用at命令。
    • at命令对应的系统服务atd的状态,通过systemctl status atd命令可以查看。
    • at命令的工作文件存放目录为/var/spool/at
    • at命令的工作日志文件位于/var/log/cron
  2. at命令详解

    • at命令的格式:at [参数] [时间]
    • at命令的一些常用参数:
      • -m:当任务完成之后,即使没有标准输出,也会给用户发送邮件。
      • -l(或atq):列出当前用户的所有at调度任务。
      • -d(或atrm):取消一个在at调度中的工作。
      • -v:使用较明显的时间格式,列出at调度中的任务列表。
      • -c:列出后面接的该项工作的实际命令内容。
      • -f:从文件中读取作业。
    • 时间格式的设置,例如HH:MM,表示在今天的HH小时MM分钟执行任务,如果这个时间点已经过了,则明天执行。(now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks)

循环执行的例行性工作

在预定的时间中执行任务,可设定为周期或特定时间

Crontab的工作过程:

  1. Cron守护进程:Cron是一个系统服务,通常称为cron守护进程。它负责检查crontab文件,并根据文件中的指令执行任务。

  2. Crontab文件:用户的crontab文件通常位于/var/spool/cron/目录下,每个用户都有自己的crontab文件。这些文件包含了要执行的命令和它们的执行时间。

  3. 权限控制:Linux系统通过两个文件/etc/cron.allow/etc/cron.deny来控制哪些用户可以使用crontab。如果cron.allow存在,则只有列在该文件中的用户才能使用crontab。如果cron.allow不存在而cron.deny存在,则列在cron.deny中的用户不能使用crontab。如果两个文件都不存在,则只有root用户可以使用crontab。

  4. 日志文件:Cron作业的执行通常会被记录在系统日志中,如/var/log/syslog/var/log/cron

  5. crontab工作调度对应的系统服务:通过systemctl status crond命令可以查看。

Crontab命令详解:(crontab --help)

  • crontab -e:编辑当前用户的crontab文件。
  • crontab -l:列出当前用户的crontab文件内容。
  • crontab -r:删除当前用户的crontab文件。
  • crontab -u [user]:指定要编辑、列出或删除的用户的crontab文件。

系统的计划任务:

Linux系统中的计划任务通常分为两类:

  1. 用户的计划任务:这些是由单个用户创建和维护的,使用crontab命令来管理。每个用户都可以有自己的crontab文件,用于安排自己的任务。

  2. 系统的计划任务:这些任务通常由系统管理员设置,用于执行系统级别的维护工作。这些任务的定义通常位于以下几个目录中:

    • /etc/crontab:这个文件包含了系统级别的crontab条目。
    • /etc/cron.d/:这个目录包含了额外的crontab文件,用于定义系统级别的任务。
    • /etc/cron.hourly//etc/cron.daily//etc/cron.weekly//etc/cron.monthly/:这些目录分别包含了每小时、每天、每周和每月执行的脚本。

Crontab计划任务的时间格式:

crontab时间格式中的五个字段,分别是分钟、小时、日、月和星期几。每个字段都有其有效范围,例如:

  • 分钟(分):0-59
  • 小时(时):0-23
  • 日(日):1-31
  • 月(月):1-12
  • 星期几(周):0-7(0或7代表周日)

[root@localhost ~]# 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

Crontab计划任务的时间格式中的特殊符号:

在crontab时间格式中使用的特殊符号及其含义:

  • 星号(*):代表任何时刻。例如,如果分钟字段是星号,则表示每分钟。
  • 逗号(,):用于分隔时段。例如,如果小时字段是"1,3,5",则表示在1点、3点和5点执行任务。
  • 连字符(-):用于表示一段时间范围。例如,如果日字段是"1-10",则表示在每月的1日至10日执行任务。
  • 斜杠(/数字):用于指定时间的间隔频率。例如,如果分钟字段是"*/15",则表示每15分钟执行一次任务。

使用crontab安排日常任务的示例:

安排一个简单的日常任务。在这个示例中,任务是在每天早上9点整执行一个wall命令,向所有登录的用户发送消息"good morning"。

  1. 使用crontab -e命令编辑当前用户的crontab文件。
  2. 在crontab文件中添加以下行:09 * * * * wall "good morning"。这行代码表示在每天的9点整执行wall命令,发送消息"good morning"。

注意事项:

%在crontab中有特殊含义。如果需要在命令中使用%,需要进行转义。

使用run-parts执行多个脚本:

run-parts命令,这是一个非常有用的工具,用于执行目录中的所有可执行文件。当你需要在同一时间执行多个脚本时,可以将这些脚本放在一个目录下,然后在crontab中添加一个条目来使用run-parts执行这个目录。

例如,如果你有一个目录/etc/cron.daily/,其中包含了多个每日执行的脚本,你可以在crontab中添加以下行:

07 04 * * * root run-parts /etc/cron.daily

这行代码表示每天早上4点07分,以root用户的身份执行/etc/cron.daily/目录中的所有脚本。

相关文章:

  • LeetCode 220 存在重复元素 III 题解
  • 高铁座位指示灯系统技术深度解析:从物联网到智慧出行的实践路径
  • [论文阅读]Deep Cross Network for Ad Click Predictions
  • 机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)
  • 多模态训练与微调
  • TypeScript简介
  • MPay码支付系统第四方聚合收款码多款支付插件个人免签支付源码TP8框架全开源
  • MD2card + Deepseek 王炸组合 一键制作小红书知识卡片
  • Qwen3与Deepseek R1对比(截止20250506)
  • CentOS 7 安装指定版本 Docker 及镜像加速/配置优化攻略
  • 计算机视觉与深度学习 | 基于数字图像处理的裂缝检测与识别系统(matlab代码)
  • SiC 材料及器件在高频大功率领域的应用现状
  • MCP服务发展现状的有趣发现
  • 【每天一个知识点】使用 apriori() 函数获取频繁项集
  • 论广告系统对存算分离架构的应用
  • 代码随想录算法训练营第60期第二十八天打卡
  • 1ms城市算网稳步启航,引领数字领域的“1小时经济圈”效应
  • C++复习
  • 老牌即时通讯应用Skype被关闭,卒年22岁!
  • 2024 ICPC武汉邀请赛暨湖北省赛 题解
  • 新华时评:任凭风云变幻,中俄关系从容前行
  • 专访|“甲亢哥”的操盘手,带NBA球星们玩转中国流量
  • 马上评|颜宁“简历打假”的启示
  • 应对美政策调整:中国重在开放与创新,维护好数据主权
  • “两高”出台司法解释,严打破坏黑土地资源犯罪
  • 《蓦然回首》:现代动画的践行与寓言