在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
示例 1.编写测试脚本脚本 time .sh $ cat time.sh #! /bin/bash echo $(date +%s) >> /home/ocean/out.txt 保存完毕后记得给予权限 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. 查看执行结果
原理 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 /etc/cron.monthly ) ununtu 通过调用 run-parts 命令,定时运行四个目录下的所有脚本。 corn程序会在后台运行并且检查cron时间表,以获知已安排执行的主页。 开启关闭cron
cron时间表 为cron时间表添加条目, 其格式为
分布代表分 时 天 月 星期几 数值范围分别是 0-59: 0-23 :1-31: 1-12: 0-7 记住几个特殊符号的含义:
corn时间表例子:
可以用三字符的文本值(mon、tue、wed、thu、fri、sat、sun)或数值(0为周日,6为周六) 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: /etc/cron.monthly: 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 15 cron.monthly run-parts --report /etc/cron.monthly 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:01 cron.monthly -rw------- 1 root root 9 May 30 10:28 cron.weekly anacron 程序使用自己的时间表来检查工作目录 时间表格式 period delay identifier command
anacron 会检查任务是否已经在period字段执行的时间被执行了,如果没有,则等待delay字段中指定的分钟数后,执行command字段中指定的命令。 一旦任务被执行,它会使用 job-id (时间戳文件名)字段中指定的名称将日期记录在 /var/spool/anacron 目录中的时间戳文件中。 cron VS anacron cron是linux自带的守护进程,用来重复运行哪些被设定好了确定的运行时间的任务,如果机器处于关机状态并错过了任务执行时间,这个任务就无法执行了
cron 和 anacron 主要的区别在于 cron 能在那些持续运行的机器上有效地运行,而 anacron 是针对那些会在一天内或者一周内会关机的机器。 参考: 到此这篇关于shell之定时周期性执行脚本的方法示例的文章就介绍到这了,更多相关shell 定时周期性执行脚本内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论