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

2025-04-21 17:50

本文主要是介绍Linux之计划任务和调度命令at/cron详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...

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

一、计划任务

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

  1. 手动执行
  2. 利用调度任务,依据一定的条件自动执行。就像Windows中的计划任务

如果打算让程序自动执行,您可以使用下面的命令来得已实现:

  • at
  • cron

二、命令{at}介绍

由atd服务负责并管理的。属于at的守护进程。可通过如下指令查看、启动、关闭atd。

#systemctl stop atd
#systemctl start atd
#systemctl restart atd
#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、特殊日期

midnight(0am)
noon(0pm)
teatime(4pm)
now( 现在 )
now + N(minutes,hours,days,weeks)
eg1:
at 23:00
at>reboot
at><EOT> ← 按 ^D 得到此符号 , 意味结束
eg2:
at now
at>ls
at><EOT>

2)时间输入规范 :

  1. 只输入时间.不输入日期,会被认为是在今天的某个时刻。
  2. 如果只输入日期,不输入时间,被认为是被输入日期的现在这个时刻。
  3. 支持输入一个完整的时间。

at时间格式

eg:

#at 23:00
#at 12/31/13
#at 23:00 12/31/13
#at noon
#at 0:00pm 12/31/13
#at teatime + 30 minutes(下午四点后的30分钟)
#at 4:00pm + 4 days(从下午4点的4天)
#at now + 4 weeks(从现在起的4周)

3)at 队列管理

at在编辑后,将进入队列中。由atd服务扫描任务并等待任务的执行

1/查看at队列可使用下面命令

  • 命令:atq
  • 功能:查看at队列
  • 结构语法:atq [ 选项 ]

at在编辑后,如打算查看某个任务队列的信息及准备执行的命令,可按如下命令执行:

#at -c at队列ID

2/at编辑后,队列等待执行。如取消预定的at任务,可以使用 atrm完成取消动作。

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

四、命令{cron}介绍

cron与at最大区别,在于cron属于依据指定周期执行预定任务。cron的守护进程为crond。

#systemctl stop crond
#systemctl start crond
#systemctl restart crond
#systemctl status crond

五、cron语法及功能

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

选项:

  • -l 查看cron计划任务列表。
  • -e 以默认文本编辑器,编辑cron计划任务列表。
  • -r 删除cron计划任务列表。
  • -u 指定用户。如果不指定用户,-l,-e,-r都认为是对当前用户操作。

(1)cron编辑的格式:

1)shell及mail格式定义

SHELL=/bin/bash

SHELL 指定以哪个shell来处理计划任务的命令。

MAILTO=root

MAILTO 指定运行完计划任务或者是运行是遇到障碍,都会发邮件给某个用户,给以提示。

2)时间格式定义

  • 分钟 0-59
  • 小时 0-23
  • 每月中的第几天 1-31
  • 月 1-12
  • 星期 0-7

//* 星期中0,7同www.chinasem.cn样表示周日

  • “*” 在第一列,能够代表每一分钟。
  • “*” 在第二列,能够代表每一小时。
  • “*” 在第三列,能够代表一个月中的每一天。
  • “*” 在第四列,能够代表一年中的每个月。
  • “*” 在第五列,能够代表一个星期中的每一天。

3) 特殊时间格式定义

连续的情况,以小时举例

1,2,3,4,5,8,9,10 可以这样写 1-5,8-10 。

周期间隔

如每隔5分钟可在第一列写成:

*/5

4)cron格式

* * * * * 所需要执行的命令及路径

eg:

0 0 1 1 * echo “Happy New Year”

示例

0 */2 13 * 5 /usr/bin/wall be careful,dark friday!

代表黑色星期五,每隔2小时,向用户发出提示。

0 20 * * 1-5 /sbin/shutdown -h now

从周1到周5,每天晚上8点,自动关机。

(2)cron编写任务

1. 以当前账户创建cron计划任务

#crontab -e

2. 以指定用户创建其cron计划任js务(仅root)

#crontab -e -u snow

3. 以指定文件作为计划任务的要求

#vim newcron
*/5 * * * * wall hello
#crontab newcron
或
#crontab -u snow newcron

(3)查看cron任务队列

1) 查看当前使用账户的cron队列

#crontjavascriptab -l

2) 查看其他账户的cron队列(仅root可以查看其他用户的cron队列)

#crontab -l -u snow

(4)清除cron任务队列

1)清除当前使用账户的cron队列

#crontab -r

2清除其他账户的cron队列(仅root可以查看其他用户的cron队列)

#crontab -r -u snow

(5)相关配置文件

/etc/crontab
系统计划任务表及说明。
/etc/cron.d
特定的系统计划任务表
/etc/cron.hourly
系统每小时要运行的计划任务。
/etc/cron.daily
系统每天要运行的计划任务。
/etc/cron.weekly
系统每个星期要运行的计划任务。
/etc/cron.monthly
系统每个月要运行的计划任务。

虽然/etc/cron.hourly等目录中全部是shell脚本,但在/etc/cron.d/0hourlyChina编程文件中,规定了使用run-parts命令来执行指定的目录脚本文件。这就使得这些上述shell脚本目录的任务得以执行。

使用run-parts脚本来执行

/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

以上目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是shell脚本。

run-parts是一个脚本,在/usr/bin/run-parts,作用是执行一个目录下的所有脚本/程序。

六、anacron

cron的计划任务执行必须保持计算机处于开启状态。如果关机或在指定的时间没有执行,将只能等待下一个周期。而anacron不同,如果在指定的时间没有成功执行,则会在一段时间之内于所指定的重试时间再次执行

anacron配置文件

#vim /etc/anacrontab

格式

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

命令

说明:

  • 时间间隔:执行任务的时间间隔
  • 等待间隔:时间间隔js到期后,任务没有执行,则使用此处设置时间再次尝试执行
  • 任务标识:任务说明
  • 命令:实际所执行的任务
period(频率.天数)
delay(延迟,分钟)
job-identifier command
  • 第一行的意思是:每天开机5分钟后就检查cron.daily文件是否被执行了,如果今天没有被执行就执行他
  • 第二行的意思是:每隔7天开机后25分钟检查cron.weekly文件是否被执行了,如果一周内没有被执行就执行他
  • 第三行的意思是:每月开机45分钟后就检查cron.monthly文件是否被执行了,如果今天没有被执行就执行他

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于Linux之计划任务和调度命令at/cron详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154304

相关文章

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/