当前位置: 首页 > 工具软件 > Anacron > 使用案例 >

anacron命令

翟英达
2023-12-01

一当前PC 环境:
Linux ubuntu 3.16.0-59-generic #79~14.04.1-Ubuntu SMP Mon Jan 18 15:41:27 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

useful link:
http://manpages.ubuntu.com/manpages/wily/man8/anacron.8.html
http://blog.csdn.net/smasegain/article/details/50569486
http://www.thegeekstuff.com/2011/05/anacron-examples/

二作用:
anacron 并不是用来取代 crontab 的,anacron 用于不能全天候开机的电脑,替代完成 cron 命令的守护进程。由于常规的计划任务通常被安排在午夜执行,如果计算机当时没有开机就不会运行这些任务。然而如果是使用anacron, 就可以确保你在下次开启电脑的时候, 任务被执行. anacron 的目的就在于运行这些计划任务,并考虑计算机关机时间。

三特性:
1: 配置文件

$ cat /etc/anacrontab
##### /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
##### period  delay   job-identifier    command
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

上面的格式是 period delay job-identifier command
period: 这是任务的周期,以天来指定,或者是 @daily、@weekly、@monthly 代表每天、每周、每月一次。你也可以使用数字:1 - 每天、7 - 每周、30 - 每月,或者 N – 几天。这里的时间不会按照我们日历上的周/月来算,而只是轮回循环的天数.

delay: 这是在执行一个任务前等待的分钟数. 还有在时间间隔period到期后,如果任务没有顺利执行,则会等待此处设置的时间,然后再次尝试执行。

job-identifier: 这是写在日志文件中任务的独特名字。

ls /var/spool/anacron/
cron.daily  cron.monthly  cron.weekly

用于存放anacron的时间戳文件. anacron每次启动时就会在/var/spool/anacron/
下面建立一个以 job-identifier为文件名的时间戳文件, 里面记录的是上一次任务完成的时间.

cat /var/spool/anacron/cron.daily   
20171127

command: 这是要执行的命令或 shell 脚本。
请注意 anacron 会在启动机器之后,频频执行此类活动,有可能导致计算机反应迟缓。这也正是/etc/anacrontab 文件中的任务有时候会以 nice 命令开头,这样可以减小它们执行优先级进而限制它们对系统的影响。可以对比下/etc/anacrontab和 /etc/crontab文件格式的不同.

2: 运行过程

举例anacron执行cron.daily的步骤
1: 启动了anacron执行到/etc/anacrontab中的cron.daily
(系统重新启动或者anacron程序启动sudo /etc/init.d/anacron start|stop|restart|force-reload|reload)
2: 查看/var/spool/anacron/cron.daily中的时间戳文件内容,
3: 取出时间戳的标记时间和当前时间对比, 如果相差超过period即1天就准备执行命令
4: 任务处于ready状态之后, 等待delay规定的时间之后就立刻执行
5: 达到执行条件的任务都完成之后anacron程序就会自动退出.
(anacron 以串行方式调用,在 /etc/init.d 的脚本中加了一个 -s 参数,便是指在前一个任务没有完成时不执行下一个任务, sudo vim /etc/init.d/anacron)

四添加自己的任务:
方法一:
在/etc/cron.daily
或者cron.monthly或者 cron.weekly下面添加cron脚本.
方法二:
直接写入 /etc/anacrontab.

五anacron与crontab 对比: :

crontabanacron
适合服务器适合桌面/笔记本电脑
它是守护进程它不是守护进程
关机时不会执行计划任务如果计划任务到期,机器是关机的,那么它会在机器下次开机后执行计划任务
可以让你以分钟级运行计划任务只能让你以天为基础来运行计划任务
普通用户和 root 用户都可以使用只有 root 用户可以使用(使用特定的配置启动普通任务)

六anacron语法命令:
anacron [-s] [-f] [-n] [-d] [-q] [-t anacrontab] [-S spooldir] [job]
anacron [-S spooldir] -u [-t anacrontab] [job]
anacron [-V|-h]
anacron -T [-t anacrontab]
-f: 表示强制调用,忽略本来的周期;
-u: 仅更新timestamp文件而不真正调用job,可以用来调整anacron的执行周期;
-s: 串行调用任务,从1.1的(4)可以看到默认就是串行调用,不指定此参数则到时间就直接执行(不便于设置依赖关系);
-n: 跳过delay直接执行,隐含调用了-s的参数;
-d: 不将任务在后台调度,信息会输出到前台,方便调试;
-q: 不显示报错信息到标准输出,可以与-d一起使用;
-t anacron table:指定默认anacrontab以外的其他配置文件;
-T: Anacrontab检验,如果语法有误则返回1,无误返回0;
-S spooldir:指定存放timestamp文件的路径,This option is required for users who wish to run anacron themselves;
-V: 显示版本信息后退出;
-h: 显示简单的帮助信息后退出

七我的疑问:
1: anacron 在完成所有任务之后自动退出了,如果不关机或者重新启动 anacron 服务,那么/etc/anacrontab中的任务如何启动?
意思是除了以上两种情况, /etc/anacrontab中的任务就不需要执行了还是说anacron本身存在某种隔固定时间会自己启动一次?

2: 如果pc上面同时存在crontab和anacron的引用, 那么根据命令的特性, 他们都会调用/etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, 和 /etc/cron.monthly/中的脚本. 系统是如何处理这之间的矛盾和冲突的?

 类似资料: