linux计划任务(crontab)

一、仅执行一次的定时任务-atd

1. at是个可以处理仅执行一次就结束的定时任务的命令,需要先启动atd服务

2. 启动atd服务

查看atd服务的状态(大部分linux发行版本中atd服务是默认开启的):systemctl status atd

运行状态:

停止状态:

​ 如果是atd服务是停止状态,需要使用 systemctl start atd启动atd服务,关闭服务使用systemctl stop atd

​ 将atd服务设为开机启动:systemctl enable atd,移除开机启动项:systemctl disable atd

3. 设置atd定时任务的方法:

使用at命令:

     1. at [-mldv] TIME选项与参数:-m:当at任务完成后,即使没有输出信息,也发送email通知使用者该任务已完成-l:at -l相当于atq,列出目前系统上该使用者所有的at计划-d:at -d相当于atrm,取消一个在at计划中的任务-v:可以使用较明显的时间格式列出at计划中的任务列表    TIME:时间格式,设置什么时候执行at定时任务的时间,格式有:HH:MM   在今日的HH:MM时刻执行,若该时刻已超过,则明天的HH:MM时刻再执行此任务         example:04:00HH:MM YYYY-MM-DD        强制在YYYY年MM月DD日的HH时MM分执行此任务              example:04:00 2015-07-30HH:MM[am|pm] [Month] [Date]          同上      example:04pm July 30HH:MM[am|pm]+number [minutes|hours|days|weeks]     某个时间点再加上几[分钟|小时|日|周]后才执行                                             example: now+5 minutes  表示现在时间加上5分钟后执行该任务2. at -c 任务号码选项与参数:-c:列出后面任务号码的任务的实际执行命令

例:五分钟后执行at任务

4.at定时任务的其他说明:

4.1 使用at命令创建的定时任务会在放在目录/var/spool/at/下

​ 创建一个新的at定时任务,/var/spool/at/目录下就会多一个文件,该文件内有该定时任务的详细信息:

4.2 at定时任务的执行与终端环境无关

​ 所有标准输出或标准错误输出都会通过邮件的方式发送到执行者的邮箱中,所以在终端中不会看到任何信息。可以使用指定数据流输出到终端设备上的方式来将信息打印到屏幕上。如:1.先使用who命令查看当前用户登录的终端名称;2.使用>/dev/pts/0将输出打印到指定终端设备上

4.3 at定时任务的权限说明

​ 1.先寻找/etc/at.allow这个文件,若该文件存在,则写在这个文件中的用户才能使用at命令,

​ 2.若/etc/at.allow不存在,则寻找/etc/at.deny文件,若该文件存在,则不在此文件中的用户才可以使用at命令。大部分linux发行版本默认只有/etc/at.deny文件,且该文件为空,如果不希望某些用户使用at的话,可以将此用户写入该文件中,一行写一个账号

说明:/etc/at.deny中的$表示换行符

​ 3.若/etc/at.deny不存在则只有root用户才能使用at命令

二、循环执行的定时任务-crond

1. crontab是个可以处理循环定时任务的命令,需要先启动crond服务

​ 启动方式同atd服务

2.设置crontab定时任务的方法

2.1 root用户和一般用户设置定时任务的方法:crontab命令

         crontab [-u username] [-l|-e|-r]选项与参数:-u:帮助其他用户建立、删除crontab定时任务,只有root才能使用-e:编辑crontab的任务内容-l:查看crontab的任务内容-r:删除所有的定时任务,若仅要删除某一项定时任务,使用crontab -e编辑,然后在文件中删除

:使用crontab -e设置定时任务

说明:使用crontab命令设置计划任务后会在目录/var/spool/cron/下生成和用户名同名的文件,该文件内记录了该用户设置的定时任务详情,如root用户设置定时任务后,/var/spool/cron/下多了用户root同名的文件:

2.2 系统例行性计划任务设置的方法:修改配置文件

配置文件一:/etc/crontab

​ SHELL=/bin/bash表示使用/bin/bash执行此文件中计划任务

​ PATH=/sbin:/bin:/usr/sbin:/usr/bin表示执行文件查找的路径

​ MAILTO=root表示此文件中的定时任务如果有标准输出或标准错误输出时,则将标准输出或标准错误输出的内容用邮件的方式通知给root

​ user-name表示指定定时任务的执行用户是谁,因为所有系统例行性计划任务都写在了此文件中,所以需要指定每条定时任务的执行用户

配置文件二:/etc/cron.d/下的所有配置文件

/etc/cron.d/下的所有配置文件内容都会被crond服务读取,该目录下的配置文件中的计划任务都会被执行,所以可以将自己编写的计划任务文件放到该目录下,配置文件格式可以仿照文件0hourly

任意月任意日任意时的01分都会执行一次run-parts /etc/cron.hourly

​ 对0hourly文件中内容有如下疑问:什么是run-parts?什么是/etc/cron.hourly?

​ /etc/cron.hourly是目录,run-parts是命令。run-parts命令:大约在5分钟之内运行某个目录下所有可执行文件。即:任意月任意日任意时的01分后的5分钟之内(每小时)都会执行一次目录/etc/cron.hourly/下的所有可执行文件注意:目录/etc/cron.hourly/下的文件必须全部为能被直接执行的命令脚本文件。

也就是说,除了自己指定分、时、日、月、周加上命令路径的crond配置文件外,还可以直接将命令放置到(或链接到)/etc/cron.hourly/下,这样该命令就会被crond在每小时的第1分钟后的5分钟内执行,你无需手动指定分时日月周。此外,/etc/下还有/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/目录,这些目录下的可执行文件在每天、每周、每月都会被执行一次。

3.cron定时任务的其他说明

3.1 cron定时任务的权限同at定时任务,同样/etc/cron.deny是默认存在的,且内容为空

3.2 周与日月不可同时存在

​ 你可以分别以周或日月为单位作为循环,但是不能使用几月几号且为星期几的模式任务。

3.3 何时使用crontab命令,何时编辑/etc/crontab,何时将文件放置在/etc/cron.d/下?

​ crond服务会主动的读取/etc/crontab、/var/spool/cron/*、etc/cron.d/*下的配置文件,并根据分时日月周的时间设置去配置各项计划任务。

​ 1.个性化的操作时使用crontab -e,如果你是根据个人需求来建立例行计划任务,建议直接使用crontab命令。

​ 2.系统维护管理时使用vim /etc/crontab,如果你这个例行计划任务是系统的重要任务,为了让自己方便管理,同时容易追踪,建议直接写入/etc/crontab中

​ 3.自己开发的软件需要设置定时任务时使用/etc/cron.d/newfile,如果你是想自己开发软件,那当然最好就是使用全新的配置文件,并且放置在/etc/cron.d/目录下

​ 4.固定每小时、每日、每周、每月都要执行的计划任务,想偷懒或是一定要在某个周期内执行的任务,也可以放置到/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/中,直接放置写入命令的可执行文件即可。

三、执行关机期间的未执行的计划任务:anacron

1. anacron可以主动帮你执行时间到了但却因为某些原因没有执行的计划任务

2.anacron的实现原理

anacron命令:

 anacron [-sfn] [job]..anacron -u [job]..选项和参数:-s:开始连续地执行各项任务(job),会根据时间记录文件的数据判断是否执行-f:强制执行,而不去判断时间记录文件的时间戳-n:立刻执行未执行的任务,而不延迟等待时间-u:仅更新时间记录文件的时间戳,不执行任何任务job:由/etc/anacrontab定义的各项任务名称

​ anacron通过cron定时任务实现,每小时会主动执行一次anacron命令。既然是每小时执行一次,那么执行anacron命令的脚本应该放置在/etc/cron.hourly/中

/var/spool/anacron/cron.daily内容是什么?on_ac_power是什么命令?

/etc/anacrontab 的内容:


period in days的单位是天,delay in minutes的单位是分钟,job-identifier表示任务名称,可自定义,在日志/var/log/cron中记录此任务名称,command表示要执行的命令

​ 什么是nice

3.anacron执行的流程(以cron.daily为例)

​ 1.由/etc/anacrontab可分析出:cron.daily这项任务的天数为1天

​ 2.从var/spool/anacron/cron.daily中取出最近一次执行anacron的时间戳

​ 3.由上个步骤中取出的时间戳与目前的时间作比较,若差异天数为1天或1天以上就准备执行命令

​ 4.若准备执行命令,根据/etc/anacrontab的设置,将延迟5分钟+3小时(看START_HOURS_RANGE的设置)。

​ 5.延迟时间过后,开始执行后续的命令,即run-parts /etc/cron.daily这串命令

​ 6.执行完毕后,anacron程序结束

4.其他说明

如果想要过期的任务也能被补执行,一定将其放在/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/中

四、系统空闲时才执行的任务:batch

​ 使用batch命令可以创建后台任务,只有当cpu的任务负载小于0.8时才会执行此任务。batch是利用at来执行命令的,只是加入了一些控制参数而已。

1. 设置batch任务的方法

[root@mycentos79 ~]# batch
at> echo "cpu lt 0.8 print this content" > /dev/pts/0
at> <EOT>
job 1 at Wed Oct 19 10:35:00 2022

2.其他说明

当cpu的任务负载小于0.8时并不会立刻执行此任务,因为不管是at还是cron任务,它们的最小时间单位都是分钟,所以,基本上atd服务和crond服务都是每分钟检查一次来处理的,就是整分(秒为0的时候)。

注:本文整理自鸟哥LINUX私房菜-基础学习篇(第四版)

Linux计划任务(at/crontab)相关推荐

  1. Linux计划任务(at,crontab)

    在LINUX中,我们通过crontab和at这两个东西来实现 at:它是一个可以处理仅执行一次就结束的指令 crontab:它是会把你指定的工作或任务,比如:脚本等,按照你设定的周期一直循环执行下去 ...

  2. Linux计划任务,CronTab用法详解

    「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「订阅专栏」:此文章已录入专栏<网络安全入门到精通> CronTab计划任务 一.服务 二.查看 ...

  3. linux计划任务之crontab

    语法:        crontab [ -u user ] file        crontab [ -u user ] [ -i ] { -e | -l | -r } 说明: crontab命令 ...

  4. Linux——计划任务(Crontab)

    添加/编辑 crontab 添加或更新 crontab -e 默认情况下,系统回编辑当前登录用户的 crontab 命令集合. 需要编辑其他用户的命令集合,需要使用下面的命令: crontab -u ...

  5. Linux之计划任务服务crontab

    Linux之计划任务服务crontab Linux中的计划任务:crontab Windows中计划任务 Linux中的计划任务 crontab -e命令:计划任务的编辑 计划任务权限 Linux中的 ...

  6. linux cron源码下载,LINUX计划任务管理_AT与crontab

    at命令 一次性计划任务 服务脚本名称:/etc/init.d/atd 设置格式:at  [HH:MM]  [yyyy-mm-dd] [[email protected]~]# date 2011年  ...

  7. linux的周期计划任务叫atd,linux计划任务

    一.单一计划任务 安装at: # yum -y install at 启动: # /etc/init.d/atd start 查看是否运行: # ps aux | grep atd 创建计划 # at ...

  8. linux计划任务执行bin文件,Linux任务计划和周期性任务执行

    linux计划任务有两类 at:未来某个时间点仅执行一次任务就结束的指令,at指令执行时必须要有atd这个服务支持. crontab:可以以时间单位为分钟,小时,每天,每周,每月,每年等循环执行某任务 ...

  9. linux的任务计划6,Linux计划任务

    Linux计划任务: 未来的某个时间执行一次任务,或者周期性执行某个任务,执行结果会通过邮件通知 定时任务:at batch 周期性任务:crontab 系统任务调度:/ect/crontab 用户任 ...

最新文章

  1. 数据蒋堂 | 非等值分组
  2. 计算机科学环境保护,CMU-如何利用计算机科学、机器学习和人工智能保护环境.pdf...
  3. TextView 的ScrollView滚动效果
  4. easyui 传递参数报错(错误:uncaught SyntaxError: Unexpected identifier)
  5. Matlab 2012安装图解
  6. pheonix从入门到进阶
  7. OSPF的虚链路配置
  8. java 整型变量,Java 整型变量
  9. java中的龟兔赛跑代码_有关JAVA编写龟兔赛跑的游戏的问题。求助……
  10. [转载] Python format()格式:中文对齐问题
  11. 存储过程中拼接sql的示例
  12. idea的debug基本用法快捷键
  13. zookeeper系列(三)zookeeper的使用--开源客户端
  14. 大数据-玩转数据-Oracle系统知识小结
  15. java中isprime_Java中的Arcane isPrime方法
  16. 安装杀毒软件是保障计算机安全,电脑安全都需要哪些杀毒软件
  17. 华为mate40pro和华为mate30pro的区别
  18. PCIE Feature ------ INTx
  19. 数字平原maya制作写实科幻场景
  20. MATLAB代码编写中自定义变量的问题

热门文章

  1. Python Pandas常用功能速查
  2. file=/pytorch/aten/src/THC/THCGeneral.cpp line=383 error=8 : invalid device
  3. 查尔姆斯理工计算机教授,瑞典查尔姆斯理工大学Jan Stake教授访问上海微系统所...
  4. Java 泛型的不变性 (invariance)、协变性 (covariance)、逆变性 (contravariance)
  5. 简学-CobaltStrike 的使用(三)
  6. C语言程序里全局变量、局部变量、堆、栈内存地址分配
  7. Python、PyCharm和Anaconda的关系
  8. STEAM教育模式:构建快乐、有效的幸福新课堂
  9. 元宇宙:一个熟悉的故事超越一个世界
  10. RMB类 SCUT OJ