• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Linux之计划任务和调度命令at/cron详解

    发布者: 天下网吧 | 发布时间: 2025-6-14 13:33| 查看数: 35| 评论数: 0|帖子模式

    Linux计划任务和调度命令at/cron


    一、计划任务

    进程是由程序执行后才产生的。程序的执行可以通过两种方法之一可以实现

    • 手动执行
    • 利用调度任务,依据一定的条件自动执行。就像windows中的计划任务
    如果打算让程序自动执行,您可以使用下面的命令来得已实现:

      1. at
      复制代码
      1. cron
      复制代码

    二、命令{at}介绍

    由atd服务负责并管理的。属于at的守护进程。可通过如下指令查看、启动、关闭atd。
    1. #systemctl stop atd
    2. #systemctl start atd
    3. #systemctl restart atd
    4. #systemctl status atd
    复制代码
    at,这是一个一次性的计划任务。at的执行主要依靠系统服务atd。系统中有2个文件

    • /etc/at.allow
    • /etc/at.deny
    这2个文件规定了系统谁可以使用at,谁不可以使用。超级用户随时可以使用at。其他用户则要受到以上2个文件的限制。
    总结如下:

    • 如果2个文件都存在,只检查/etc/at.allow,只有在/etc/at.allow中规定的用户才可以使用。
    • 如果只有/etc/at.deny存在,每个在该文件中不存在的用户都可以使用。
    • 如果2个文件都不存在,只有超级用户可以使用。

    三、命令语法及功能 :at


    • 语法:at [ 选项 ] [time]
    • 功能 : 依据预先定义好的时间 , 执行指定进程
    1)at可接受的时间格式
    1、日期

    • MM/DD/YY
    • MMDDYY
    • DD.MM.YY
    2、时间

    • HH:MM
    • HH:MMam
    • HH:MMpm
    3、特殊日期
    1. midnight(0am)
    2. noon(0pm)
    3. teatime(4pm)
    4. now( 现在 )
    5. now + N(minutes,hours,days,weeks)
    6. eg1:
    7. at 23:00
    8. at>reboot
    9. at><EOT> ← 按 ^D 得到此符号 , 意味结束
    10. eg2:
    11. at now
    12. at>ls
    13. at><EOT>
    复制代码
    2)时间输入规范 :

    • 只输入时间.不输入日期,会被认为是在今天的某个时刻。
    • 如果只输入日期,不输入时间,被认为是被输入日期的现在这个时刻。
    • 支持输入一个完整的时间。
    at时间格式
    eg:
    1. #at 23:00
    2. #at 12/31/13
    3. #at 23:00 12/31/13
    4. #at noon
    5. #at 0:00pm 12/31/13
    6. #at teatime + 30 minutes(下午四点后的30分钟)
    7. #at 4:00pm + 4 days(从下午4点的4天)
    8. #at now + 4 weeks(从现在起的4周)
    复制代码
    3)at 队列管理
    at在编辑后,将进入队列中。由atd服务扫描任务并等待任务的执行
    1/查看at队列可使用下面命令

    • 命令:atq
    • 功能:查看at队列
    • 结构语法:atq [ 选项 ]
    at在编辑后,如打算查看某个任务队列的信息及准备执行的命令,可按如下命令执行:
    1. #at -c at队列ID
    复制代码
    2/at编辑后,队列等待执行。如取消预定的at任务,可以使用 atrm完成取消动作。

    • 命令:atrm
    • 功能:删除at队列中的指定任务
    • 结构语法:atrm [ 选项 ] [ 队列 ID]

    四、命令{cron}介绍

    cron与at最大区别,在于cron属于依据指定周期执行预定任务。cron的守护进程为crond。
    1. #systemctl stop crond
    2. #systemctl start crond
    3. #systemctl restart crond
    4. #systemctl status crond
    复制代码
    五、cron语法及功能


    • 命令:crontab
    • 功能:实现周期性计划任务的执行
    • 语法格式:crontab [ 选项 ]
    选项:

    • -l 查看cron计划任务列表。
    • -e 以默认文本编辑器,编辑cron计划任务列表。
    • -r 删除cron计划任务列表。
    • -u 指定用户。如果不指定用户,-l,-e,-r都认为是对当前用户操作。
    (1)cron编辑的格式:
    1)shell及mail格式定义
    1. SHELL=/bin/bash
    复制代码
    SHELL 指定以哪个shell来处理计划任务的命令。
    1. MAILTO=root
    复制代码
    MAILTO 指定运行完计划任务或者是运行是遇到障碍,都会发邮件给某个用户,给以提示。
    2)时间格式定义

    • 分钟 0-59
    • 小时 0-23
    • 每月中的第几天 1-31
    • 月 1-12
    • 星期 0-7
    //* 星期中0,7同样表示周日

    • “*” 在第一列,能够代表每一分钟。
    • “*” 在第二列,能够代表每一小时。
    • “*” 在第三列,能够代表一个月中的每一天。
    • “*” 在第四列,能够代表一年中的每个月。
    • “*” 在第五列,能够代表一个星期中的每一天。
    3) 特殊时间格式定义
    连续的情况,以小时举例
    1,2,3,4,5,8,9,10 可以这样写 1-5,8-10 。
    周期间隔
    如每隔5分钟可在第一列写成:
    1. */5
    复制代码
    4)cron格式
    * * * * * 所需要执行的命令及路径
    eg:
    1. 0 0 1 1 * echo “Happy New Year”
    复制代码
    示例
    1. 0 */2 13 * 5 /usr/bin/wall be careful,dark friday!
    复制代码
    代表黑色星期五,每隔2小时,向用户发出提示。
    1. 0 20 * * 1-5 /sbin/shutdown -h now
    复制代码
    从周1到周5,每天晚上8点,自动关机。
    (2)cron编写任务
    1. 以当前账户创建cron计划任务
    1. #crontab -e
    复制代码
    2. 以指定用户创建其cron计划任务(仅root)
    1. #crontab -e -u snow
    复制代码
    3. 以指定文件作为计划任务的要求
    1. #vim newcron
    2. */5 * * * * wall hello
    3. #crontab newcron

    4. #crontab -u snow newcron
    复制代码
    (3)查看cron任务队列
    1) 查看当前使用账户的cron队列
    1. #crontab -l
    复制代码
    2) 查看其他账户的cron队列(仅root可以查看其他用户的cron队列)
    1. #crontab -l -u snow
    复制代码
    (4)清除cron任务队列
    1)清除当前使用账户的cron队列
    1. #crontab -r
    复制代码
    2清除其他账户的cron队列(仅root可以查看其他用户的cron队列)
    1. #crontab -r -u snow
    复制代码
    (5)相关配置文件
    1. /etc/crontab
    2. 系统计划任务表及说明。
    3. /etc/cron.d
    4. 特定的系统计划任务表
    5. /etc/cron.hourly
    6. 系统每小时要运行的计划任务。
    7. /etc/cron.daily
    8. 系统每天要运行的计划任务。
    9. /etc/cron.weekly
    10. 系统每个星期要运行的计划任务。
    11. /etc/cron.monthly
    12. 系统每个月要运行的计划任务。
    复制代码
    虽然/etc/cron.hourly等目录中全部是shell脚本,但在/etc/cron.d/0hourly文件中,规定了使用run-parts命令来执行指定的目录脚本文件。这就使得这些上述shell脚本目录的任务得以执行。
    使用run-parts脚本来执行
    1. /etc/cron.hourly
    2. /etc/cron.daily
    3. /etc/cron.weekly
    4. /etc/cron.monthly
    复制代码
    以上目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是shell脚本。
    run-parts是一个脚本,在/usr/bin/run-parts,作用是执行一个目录下的所有脚本/程序。

    六、anacron

    cron的计划任务执行必须保持计算机处于开启状态。如果关机或在指定的时间没有执行,将只能等待下一个周期。而anacron不同,如果在指定的时间没有成功执行,则会在一段时间之内于所指定的重试时间再次执行
    anacron配置文件
    1. #vim /etc/anacrontab
    复制代码
    格式

    • 时间间隔(默认为天,@monthly为1个月内执行)
    • 等待间隔(默认为分钟)
    • 任务标识
    命令
    说明:

    • 时间间隔:执行任务的时间间隔
    • 等待间隔:时间间隔到期后,任务没有执行,则使用此处设置时间再次尝试执行
    • 任务标识:任务说明
    • 命令:实际所执行的任务
    1. period(频率.天数)
    2. delay(延迟,分钟)
    3. job-identifier command
    复制代码

    • 第一行的意思是:每天开机5分钟后就检查cron.daily文件是否被执行了,如果今天没有被执行就执行他
    • 第二行的意思是:每隔7天开机后25分钟检查cron.weekly文件是否被执行了,如果一周内没有被执行就执行他
    • 第三行的意思是:每月开机45分钟后就检查cron.monthly文件是否被执行了,如果今天没有被执行就执行他

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    来源:https://www.jb51.net/server/340062uk6.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表