shell学习之定时运行作业
当你开始使用脚本时,可能会想要在某个预设时间运行脚本。 Linux系统提供了多个在预选时间运行脚本的方法:at命令和cron表,来安排脚本的运行时间和频率。
一.用at命令来计划执行作业
at命令允许指定Linux系统何时运行脚本。at命令会将作业提交到队列中,指定shell何时运 行该作业。at的守护进程会以后台模式运行,检查作业队列来运行作业。
at命令的基本格式非常简单:at [-f filename] time
默认情况下,at命令会将STDIN的输入放到队列中。你可以用-f参数来指定用于读取命令(脚本文件)的文件名。
time参数指定了Linux系统何时运行该作业。如果你指定的时间已经错过,at命令会在第二天的那个时间运行指定的作业。
在如何指定时间这个问题上,你可以非常灵活。at命令能识别多种不同的时间格式。
- 标准的小时和分钟格式,比如10:15。
- AM/PM指示符,比如10:15 PM。
- 特定可命名时间,比如now、noon、midnight或者teatime(4 PM)。
- 标准日期格式,比如MMDDYY、MM/DD/YY或DD.MM.YY。
- 文本日期,比如Jul 4或Dec 25,加不加年份均可。
- 当前时间+25 min
- 明天10:15 PM
- 10:15+7天
输出:
atq命令可以查看系统中有哪些作业在等待,作业列表中显示了作业号、系统运行该作业的日期和时间及其所在的作业队列。
一旦知道了哪些作业在作业队列中等待,就能用atrm命令来删除等待中的作业。
只要指定想要删除的作业号就行了。只能删除你提交的作业,不能删除其他人的。
二. cron时间表
Linux系统使用cron程序来安排要定期执行的作业。cron程序会在后台运行并检查一个特殊的 表(被称作cron时间表),以获知已安排执行的作业。
cron时间表采用一种特别的格式来指定作业何时运行。
其格式如下:min hour dayofmonth month dayofweek command
cron时间表允许你用特定值、取值范围(比如1~5)或者是通配符(星号)来指定条目
在crontest.cron中编写以下:
加入定时任务中:crontab /root/shellleaner/crontest.cron
每个系统用户(包括root用户)都可以用自己的cron时间表来运行安排好的任务。Linux提供 了crontab命令来处理cron时间表。要列出已有的cron时间表,可以用-l选项:crontab -l
如果你创建的脚本对精确的执行时间要求不高,用预配置的cron脚本目录会更方便。有4个 基本目录:hourly、daily、monthly和weekly。
因此,如果脚本需要每天运行一次,只要将脚本复制到daily目录,cron就会每天执行它。