ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux shell 定时运行脚本

2022-09-16 22:31:32  阅读:248  来源: 互联网

标签:shell 队列 作业 anacron cron Linux 定时 运行


at 命令允许指定Linux系统何时运行脚本。at命令会将作业提交到队列中,指定shell何时运行该作业。at 的守护进程atd会以后台模式运行,检查作业队列来运行作业。大多数Linux发行版会在 启动时运行此守护进程。
atd 守护进程会检查系统上的一个特殊目录(通 常位于/var/spool/at)来获取用at命令提交的作业。默认情况下,atd 守护进程会每60秒检查一下这个目录。有作业时,atd 守护进程会检查作业设置运行的时间。如果时间跟当前时间匹配,atd守护进程就会运行此作业。

格式:

at [-f filename] time

默认情况下,at命令会将STDIN 的输入放到队列中。你可以用-f参数来指定用于读取命令(脚本文件)的文件名。time参数指定了Linux系统何时运行该作业。如果你指定的时间已经错过,at 命令会在第二天的那个时间运行指定的作业。

支持的时间格式:

  1. 标准的小时和分钟格式,比如10:15。
  2. AM/PM指示符,比如10:15 PM。
  3. 特定可命名时间,比如now、noon、midnight 或者teatime(4 PM)。
  4. 标准日期格式,比如MMDDYY、 MM/DD/YY或DD.MM.YY。
  5. 文本日期,比如Jul 4或Dec 25,加不加年份 均可。
  6. 当前时间+25 min
  7. 明天10:15 PM
  8. 10:15+7天

针对不同优先级,存在26种不同的作业队列。作业队列通常用小写字母az和大写字母AZ来指代。作业队列的字母排序越高,作业运行的优先级就越低(更高的nice 值)。默认情况下,at 的作业会被提交到a作业队列。如果想以更高优先级运行作业,可以用-q参数指定不同的队列字母。

Linux系统会将提交该作业的用户的电子邮件地址作为STDOUT和STDERR。任何发到STDOUT或STDERR的输出都会通过邮件系统发送给该用户。

例子:

#!/bin/bash

echo This script running is  $(date +%B%d,%T)

at命令的返回结果是作业号和作业运行时间。

#!/bin/bash

echo This script running is  $(date +%B%d,%T) > atlog

atq查看等待的作业:

第一列是作业id,第二列是作业运行时间,第三列是作业队列。

atrm 作业号删除指定作业。

Linux系统使用cron程序来安排要定期执行的作业。cron程序会在后台运行并检查一个特殊的表(被称作cron时间表 ),以获知已安排执行的作业。

cron时间表采用一种特别的格式来指定作业何时运行。其格式如下:

min hour dayofmonth month dayofweek command

cron时间表允许你用特定值、取值范围(比如 1~5)或者是通配符(星号)来指定条目。可以用三字符的文本值(mon、tue、wed、thu、 fri、sat、sun)或数值(0为周日,6为周六)来指定dayofweek表项。

怎么判断每月最后一天,使用date命令的if-then语句来检查明天的日期是不是01:

 00 12 * * * if [`date +%d -d tomorrow` = 01 ] ; then ; command

它会在每天中午12点来检查是不是当月的最后一天,如果是,cron将会运行该命令。

每个系统用户(包括root用户)都可以用自己的cron时间表来运行安排好的任务。Linux提供了crontab命令来处理cron时间表。-l查看cron时间表。使用-e添加cron时间表。有4个基本目录:hourly、daily、monthly和weekly预配置的cron脚本目录。

如果已到作业的运行时间但linux未启动,则作业不会运行。使用anacron运行错过时间的作业。anacron程序只会处理位于cron目录的程序,比如/etc/cron.monthly。它用时间戳来决定作业是否在正确的计划间隔内运行了。每个cron目录都有个时间戳文件,该文件位于/var/spool/anacron。anacron程序使用自己的时间表(通常位 于/etc/anacrontab)来检查作业目录。

anacron时间格式:

period delay identifier command

period条目定义了作业多久运行一次,以天为单位。anacron程序用此条目来检查作业的时间戳文件。delay条目会指定系统启动后anacron程序需要等待多少分钟再开始运行错过的脚本。command 条目包含了run-parts程序和一个cron脚本目录名。 run-parts程序负责运行目录中传给它的任何脚本。

identifier条目是一种特别的非空字符串,如cron-weekly 。它用于唯一标识日志消息和错误邮件中的作业。

标签:shell,队列,作业,anacron,cron,Linux,定时,运行
来源: https://www.cnblogs.com/shigongp/p/16700619.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有