shell之定时周期性执⾏脚本的⽅法⽰例
⽰例
1.编写测试脚本脚本 time .sh
$ cat time.sh
#! /bin/bash
echo $(date +%s) >> /home/
保存完毕后记得给予权限 chmod 777 test.sh
2.添加定时任务
$ crontab -e
no crontab for ocean - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano    <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
内容编辑为:每⼀分钟执⾏⼀次
# m h dom mon dow  command
* * * * * /home/ocean/workspaces/shell/time.sh
3.查看定时任务是否添加成功
$ crontab -l
4.重启cron:新加⼊的定时任务不会马上执⾏,⼀般要等⼀会⼉,除⾮你重启服务器
$ sudo service cron restart
注意,新创建的cron作业,不会马上执⾏,⾄少要过2分钟才执⾏。如果重启cron服务则会马上执⾏。
5. 查看执⾏结果
$
1552543807
1552543861
1552543921
1552543981
1552544041
1552544101
原理
ubuntu默认安装了cron,是开机⾃启动的。
当cron启动后,它会读取它的所有配置⽂件,然后cron会根据命令和执⾏时间来调度⼯作任务。
cron有两个配置⽂件,⼀个是⼀个全局配置⽂件(/etc/crontab),是针对系统任务的;⼀组是crontab命令⽣成的配置⽂件(/var/spool/cron下的⽂件),是针对某个⽤户的.定时任务配置到任意⼀个中都可以。
每个⽤户的计划任务配置⽂件
$ ls -l /var/spool/cron/
total 4
drwx-wx--T 2 root crontab 4096 Nov 16 2017 crontabs
备注:这个歌⽬录下只会有⼀个crontabs,就算新添加其他计划,也只会有⼀个。
全局性配置⽂件
$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root  cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /hly )
ununtu 通过调⽤ run-parts 命令,定时运⾏四个⽬录下的所有脚本。
1)/etc/cron.hourly,⽬录下的脚本会每个⼩时让执⾏⼀次,在每⼩时的17分钟时运⾏;
2)/etc/cron.daily,⽬录下的脚本会每天让执⾏⼀次,在每天的6点25分时运⾏;
3)/etc/cron.weekly,⽬录下的脚本会每周让执⾏⼀次,在每周第七天的6点47分时运⾏;
4)/uthly,⽬录下的脚本会每⽉让执⾏⼀次,在每⽉1号的6点52分时运⾏;
当然,以上的时间均是系统默认时间,可以根据⾃⼰的需求进⾏修改。
corn程序会在后台运⾏并且检查cron时间表,以获知已安排执⾏的主页。
开启关闭cron
命令作⽤
sudo service cron status查看cron状态
sudo /etc/init.d/cron start启动cron
sudo /etc/init.d/cron stop关闭cron
sudo /etc/init.d/cron restart重启cron
cron时间表
为cron时间表添加条⽬, 其格式为
min hour dayofmonth month dayofweek command
分布代表分时天⽉星期⼏数值范围分别是 0-59: 0-23 :1-31: 1-12: 0-7
记住⼏个特殊符号的含义:
星号(*):代表所有可能的值,举个例⼦,在⼩时字段中,⼀个星号等同于每个⼩时;在⽉份字段中,⼀个星号则等同于每⽉。
逗号(,):可以⽤逗号隔开的值指定⼀个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以⽤整数之间的中杠表⽰⼀个整数范围,例如“2-6”表⽰“2,3,4,5,6”
正斜线( / ):可以⽤正斜线指定时间的间隔频率,例如“0-23/2”表⽰每两⼩时执⾏⼀次。同时正斜线可以和星号⼀起使⽤,例如*/10,如果⽤在minute字段,表⽰每⼗分钟执⾏⼀次。
corn时间表例⼦:
* * * * * test .sh 每分钟执⾏⼀次 test .sh
shell vim命令*/5 * * * * test .sh 每5分钟执⾏⼀次 test .sh
0 */2 * * * test .sh > out 每两⼩时执⾏⼀次test.sh并将结果存⼊out中
00 00 * * * /home/rich/test.sh 每天的凌晨0:0分执⾏
30 21 * * * /home/rich/test.sh 每天的21:30分执⾏
15 16 * * 1 command 每周⼀16:15 运⾏命令
00 12 1 * * command 每个⽉的1号的中午12:00点执⾏命令
00 8* * * if [date +%d -d tomorrow = 01 ] ; then ; command 每个⽉的最后⼀天8点执⾏命令
可以⽤三字符的⽂本值(mon、tue、wed、thu、fri、sat、sun)或数值(0为周⽇,6为周六)
来指定dayofweek表项。
cron⽬录
如果脚本对精确的执⾏时间要求不⾼,⽤预配置的cron脚本更⽅便
$ ls /etc/cron.*ly
/etc/cron.daily:
0anacron apt-compat  cracklib-runtime logrotate mlocate popularity-contest  update-notifier-common
apport  bsdmainutils dpkg      man-db  passwd  ubuntu-advantage-tools
/etc/cron.hourly:
/hly:
0anacron
/etc/cron.weekly:
0anacron man-db update-notifier-common
⽐如,如果脚本每天运⾏⼀次,只要将脚本复制到daily⽬录,cron就会每天执⾏它【根据/etc/crontab下配置的时间】
anacron
缺点:cron可以执⾏⼀些定时任务,但是如果这个时间点来了,但是此时linux系统正在关机中,那么这个定时任务不能执⾏。即使系统再次开机,cron也不会去执⾏哪些已经错过了的程序。
解决:anacron,开机时会⾃动运⾏关机期间的作业。前提是这个程序位于cron⽬录之下。
应⽤场景:anacron ⽤于以天为单位的频率运⾏命令。它的⼯作与 cron 最⼤的不同在于,它假设机器不会⼀直开机。
anacron ⼯作原理
anacron 的任务被列在/etc/anacrontab
sudo cat /etc/anacrontab
[sudo] password for ocean:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly hly run-parts --report /hly
ununtu 通过调⽤ run-parts 命令,定时运⾏3个⽬录下的所有脚本。
从上⾯可以看出,anacron 的运⾏频率的最⼩时间是天。【cron是分钟】
$ ls -l /var/spool/anacron/
total 12
-rw------- 1 root root 9 Jun 1 10:25 cron.daily
-rw------- 1 root root 9 May 27 11:hly
-rw------- 1 root root 9 May 30 10:28 cron.weekly
anacron 程序使⽤⾃⼰的时间表来检查⼯作⽬录
时间表格式
period delay identifier command
period - 这是任务的频率,以天来指定,或者是@daily 、@weekly、@monthly 代表每天、每周、每⽉⼀次。你也可以使⽤数字:1 - 每天、7 - 每周、30- 每⽉,或者N - ⼏天。 anacron程序⽤此条⽬来检查作业的时间戳⽂件
delay - 这是在执⾏⼀个任务前等待的分钟数。
identifier - 条⽬是⼀种特别的⾮空字符串,如cron-weekly。它⽤于唯⼀标识⽇志消息和错误邮件中的作业。
command - 这是要执⾏的命令或 shell 脚本。
anacron 会检查任务是否已经在period字段执⾏的时间被执⾏了,如果没有,则等待delay字段中指定的分钟数后,执⾏command字段中指定的命令。
⼀旦任务被执⾏,它会使⽤ job-id (时间戳⽂件名)字段中指定的名称将⽇期记录在 /var/spool/anacron ⽬录中的时间戳⽂件中。
cron VS anacron
cron是linux⾃带的守护进程,⽤来重复运⾏哪些被设定好了确定的运⾏时间的任务,如果机器处于关机状态并错过了任务执⾏时间,这个任务就⽆法执⾏了
crontab(cron table的简称)既可以指cron⽤来定期执⾏特定任务所需要的列表⽂件,⼜可以指⽤来创建、删除、查看当前⽤户(或者指定⽤户)的crontab⽂件的命令。
anacron不是守护进程,可以看做是cron守护进程的某种补充程序,anacron是独⽴的linux程序,被cron守护进程或者其他开机脚本启动运⾏,可以每天、每周、每个⽉周期性地执⾏⼀项任务(最⼩单位为天)。适合于可能经常会关机的机器,当机器重新开机anacron程序启动之后,anacron会检查anacron任务是否在合适的周期执⾏了,如果未执⾏则在anacron设定好的延迟时间之后只执⾏⼀次任务,⽽不管任务错过了⼏次周期。举个例⼦,⽐如你设定了⼀个每周备份⽂件的任务,但是你的电脑因为你外出度假⽽处于关机状态四周,当你回到家中开机后,anacron会在延迟⼀定时间之后只备份⼀次⽂件。由于发⾏版的不同,cron守护进程如何运⾏anacron会有所不同。
cron anacron
它是守护进程它不是守护进程
适合服务器适合桌⾯/笔记本电脑
可以让你以分钟级运⾏计划任务只能让你以天为基础来运⾏计划任务
关机时不会执⾏计划任务如果计划任务到期,机器是关机的,那么它会在机器下次开机后执⾏计划任务
普通⽤户和 root ⽤户都可以使⽤只有 root ⽤户可以使⽤(使⽤特定的配置启动普通任务)
cron 和 anacron 主要的区别在于 cron 能在那些持续运⾏的机器上有效地运⾏,⽽ anacron 是针对那些会在⼀天内或者⼀周内会关机的机器。
到此这篇关于shell之定时周期性执⾏脚本的⽅法⽰例的⽂章就介绍到这了,更多相关shell 定时周期性执⾏脚本内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。