小晨学习笔记之计划任务:at,cron,crontab.anacron

作用:计划任务主要做一些周期任务,如定期备份数据

所有计划任务执行的输出都会以邮件形式发送给指定用户,除非重定向

1.一次调度执行at

环境:安装at并开启atd

语法格式:
at <+time>
例如:now +3min

也可以用输入重定向:
at now +3min < txt.at

其中注意,如果使用sudo用户执行at,并重定向,要注释sudo用户执行命令需要密码的代码,并取消注释sudo用户执行命令无需密码的代码

## Allows people in group wheel to run all commands
#wheel  ALL=(ALL)       ALL

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

2.循环调度执行

2.1 cron,crontab以及anacron的关系

cron是大多数linux发行版都自带的守护进程(daemon),用来重复运行某些被设定好了确定的运行时间的任务,这些任务可以是每个月运行、每周运行、每天运行,甚至是每一分钟运行。用cron执行的任务适合于24小时运行的机器,cron执行的任务会在设定好的时刻执行,当机器处于关机状态下并错过了任务执行的时间,cron任务就无法预期执行了。

crontab(cron table的简称)既可以指cron用来定期执行特定任务所需要的列表文件,又可以指用来创建、删除、查看当前用户(或者指定用户)的crontab文件的命令。

anacron不是守护进程,可以看做是cron守护进程的某种补充程序,anacron是独立的linux程序,被cron守护进程或者其他开机脚本启动运行,可以每天、每周、每个月周期性地执行一项任务(最小单位为天)。适合于可能经常会关机的机器,当机器重新开机anacron程序启动之后,anacron会检查anacron任务是否在合适的周期执行了,如果未执行则在anacron设定好的延迟时间之后只执行一次任务,而不管任务错过了几次周期。举个例子,比如你设定了一个每周备份文件的任务,但是你的电脑因为你外出度假而处于关机状态四周,当你回到家中开机后,anacron会在延迟一定时间之后只备份一次文件。由于发行版的不同,cron守护进程如何运行anacron会有所不同。

---------转载自爱折腾的小白)

2.2用户级:crontab -e

存储位置

[root@alytest ~]# ls /var/spool/cron

基础命令

[root@alytest ~]# crontab -l #显示当前任务
root@alytest ~]# crontab -r #删除任务
root@alytest ~]# crontab -e #编辑任务

管理员可以 -u usernane 管理其他用户的任务

语法格式
分 时 日 月 年 command或脚本

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

例如 * * * * * /mysql.sh(每分钟执行一次)

0 3 * * * /mysql.sh(每天3点执行一次)

0 3 14 * * /mysql.sh(每月13号3点执行一次)

0 3 14 2 * /mysql.sh(每年2月13日3点执行一次)

0 3 * * 5 /mysql.sh(每周五的3点执行一次)

0 3 14 * 5 /mysql.sh(每月14日的3点或者每周五的3点执行一次)

日和星期是或者关系

*/5 * * * * /mysql.sh(每5分钟执行一次)

2.3系统级:

临时文件的清理 /tmp/var/tmp
系统信息的采集 sar(盲区)
日志的轮转(切割)logrotate (盲区)

语法格式为 : * * * * * username command/脚本/目录

定义位置1

[root@alytest ~]# vi /etc/crontab

定义位置2:/etc/cron.d/*
周期最小为分

[root@alytest ~]# vi /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
		  #每过一分钟执行
          #run_parts 后跟目录,表示执行目录下的所有脚本

| |
| |
| |
\ /

查看[root@alytest ~]# cat /etc/cron.hourly/0anacron

#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi

# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s     #启动anacron进程!

| |
| |
| |
\ /

重点 在 /etc/anacrontab anacron进程用于因关机等原因而错过的任务,延迟指定时间后给予执行,最小周期为天


# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

假如开机后发现这个任务没有执行,已经过去了一天,那么系统将延迟5分钟后执行

(在/etc/anacrontab中的最后三条默认anacron任务中,nice命令用来调整后面命令的优先级,run-parts命令用来执行设置的目录下的所有脚本,就是说这三条任务分别每天,每周,每月执行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下的脚本。所以我们不用自己往/etc/anacrontab中添加anacrontab任务,而只需把脚本放到相应的目录下,anacron就会周期性的执行这些脚本了。
-----------转载自爱折腾的小白)

发布了2 篇原创文章 · 获赞 2 · 访问量 112

猜你喜欢

转载自blog.csdn.net/qq_46341303/article/details/105178219
今日推荐