一、什么是计划任务
如果想要让自己设计的备份程序可以自动地在系统下面运行,而不需要手动来启动它,这是该如何处理?这些任务可以分为【单一】任务和【循环】任务,在系统内又是哪些服务在负责?有的工作是例行性的,而有些任务是临时发生的。但是计算机不在身边这时就可以使用计划任务(corntable)来实现。
1、linux计划任务的种类(定时执行) :at、corn
①、at:at是一个仅可以执行一次就结束的命令,不过要执行at时,必须要有atd这个服务【可以使用“service atd status” 来查看是否运行】
②、crontab:crontab这个命令所设置的任务会一直执行下去,可设置循环时间(秒、分钟、小时、周、月、年等)。crontab除了可以使用命令执行外,也可以变价 /etc/crontab 来支持,让 crontab 可以生效的服务则是 crond。
2、CenterOS LInux 系统上常见的一些例行性工作
①、执行日志文件的论循:linux会主动记录下系统所发生的的各种信息,即日志文件。这就是 logrotate 任务,也是系统必要的例行任务。
②、日志文件分析 logwatch 的任务:CenterOS提供了一个程序【logwatch】来主动分析登录信息,所有会发现,你的root老是会收到 logwatch 为标题的邮件。
③、建立 locate 的数据库:系统的计划任务所产生的效果,系统会主动地执行 updatedb。
④、manpage查询数据库的建立:课提供快速查询的 manpagedb 数据库,但是必须要执行 mandb 才能够建立。
⑤、RPM软件日志文件的建立:由于系统会常常变更软件,会造成软件安装文件名的差异。为了方便追踪,系统会帮我们将文件名作个排序的记录。
⑥、删除缓存:某些软件运行会产生一些缓存,但是关闭软件之后,缓存未被清除。为了避免这些缓存将磁盘容量消耗光,系统会通过计划任务执行名为 tmpwatch 的命令来删除这些缓存。
⑦、与网络服务有关的分析操作:如果你安装了类似网站服务器的软件(例如你安装了Apache),那么你的Linux系统通常就会主动分析该软件的日志文件。同时某些凭证与认证的网络信息是否过期问题,Linux也会执行自动检测。
二、仅执行一次的计划任务
1、atd的启动与at运行的方式
启动atd服务
语法:service atd start
事实上,我们使用 at 这个命令来产生所要运行的任务,并将这个任务以文本文件的方式写入 /var/spool/at/ 目录内,该任务就可以等待 atd 服务的使用和执行了。
我么你可以利用 /etc/at.allow(写在该文件中的用户允许使用 at) 和 /etc/at.deny(写在该文件中的用户不允许使用 at) 这两个文件来实现对at的使用限制。
注意:如果两个文件都不存在,则只有root才可以使用at。
2、实际运行单一计划任务
语法:at [-mldv] TIME
语法:at -c 任务号码
“-m”:当 at 任务完成后,即使没有输出信息,也可以发出 email 通知使用者该任务已完成。
“-l”:相当于atq,列出目前系统上面所有该使用者的 at 计划。
“-d”:相当于atrm,可以取消一个在 at 任务中的计划。
“-v”:使用较明显的时间格式列出 at 计划中的任务列表。
“-c”:可以列出后面接的该项任务的实际命令内容。
TIME:时间格式有“HH:MM”;“HH:MM YYYY-MM-DD”;“HH:MM[am|pm] + number [minutes|hours|days|weeks](表示在某个时间点【再加几个时间后】才执行),例如:now + 5 minutes ; 04pm + 3 days”。
案例一:五分钟后,将 /root/.bashrc 发给 root 自己
注意:执行 at 会进入 at shell 环境,让你执行多重命令等待运行。
案例二、查看刚刚执行的内容
①、batch:系统有空时才执行后台任务
它是 在CPU的任务负载小于0.8的时候,才执行后续的工作任务。负载的意思是:CPU在单一时间点所负责的任务数量,而不是CPU的使用率。
也就是说,CPU的任务负载大,代表CPU必须要在不同的任务之间执行频繁的任务切换。如果一直切换任务,会导致系统忙绿。系统如果忙碌,还去执行 at 命令,不太合理,所有才有了 batch 。
三、循环执行的计划任务
循环任务由 cron (crond)这个系统服务来控制的,Linux也提供用户控制计划任务的命令(crontab)(定时执行)。
1、用户的设置
为了限制 crontab 的账号使用,可以使用以下配置文件(建议保留一个文件即可):
①、/etc/cron.allow(优先级高)
将可以使用crontab的账号写入其中,不在这个文件内的用户则不可以使用crontab。
②、/etc/cron.deny
将不可以使用crontab的账号写入其中,不在这个文件中的用户就可以使用crontab。
当用户使用 crontab 这个命令来建立计划任务之后,该项任务就会被记录到 /var/spool/cron/ 中,而且是以账号来作为判断根据的。注意:不要使用 vi 来直接编辑该文件,英文可能由于输入语法错误,会导致无法执行 cron 。
语法:crontab [-u username] [-l] [-e] [-r]
“-u”:只有root才能执行这个任务,亦即帮其他使用者建立/删除crontab计划任务
“-e”:编辑crontab的任务内容
“-l”:查看crontab的任务内容
“-r”:删除所有crontab的任务内容,若要删除一行,请使用-e去编辑
取值范围:
分:0-59
时:0-23
日:1-31
月:1-12
周:0-7,0和7表示星期天
符号:
“ * ”:表示取值范围的每一个数字
“ - ”:做区间表达式,例如:1-7表示1~7
“ / ”:表示每多少个,例如*/10表示每10分钟执行1次
“ , ”:表示多个取值,例如1,2,6表示多个点执行
案例三:在指定时间执行特定的计划任务
语法:crontab -e ;进入编辑页面编辑任务,注意:每一行都是一项任务。
【0 12 * * * mail -s “at 12:00” linux123 < /home/linux123/.bashrc】
分、时、日、月、周、命令串(个人配置可以修改 /etc/crontab)
案例四:每月1、10、22日的下午4:45重启network服务
语法:45 16 1,10,22 * * service network restart
案例五:每天18:00至23:00之间每隔30分钟重启network服务
语法:*/30 18-23 * * * service network restart
案例六:每隔两天的上午8点到11点的第3和第15分钟执行一次重启
语法:*3,15 8-11 /2 * * reboot
四、可唤醒停机期间的工作任务
如果记不起某个特别重要的命令要执行的时候,可以使用 anacron(一个程序,而不是服务) 这个命令的功能,可以主动帮我们执行时间到了但是没有执行的计划任务。主要用于处理非24小时运行的Linux系统所执行的crontab,以及因为某些原因导致超过时间而没有被执行的任务。
1、anacron(定期执行)
配置文件位置: /etc/cron.hourly/0anacron
0表示最先执行,让时间戳先更新,避免误判crontab尚未执行任何任务
语法:anacron [-sfn] [job]
语法:anacron -u [job]
“-s”:开始连续地执行各项任务(job),根据时间记录文件的数据判断是否执行
“-f”:(force)强制执行
“-n”:立即执行未执行的任务,而不延迟(delay)等待时间
“-u”:仅更新时间记录文件的时间戳,不执行任何任务
job:由 /etc/anacrontab 定义的各项任务名称