[RH134] 3-计划任务

1.at计划任务

at计划任务,只在某个指定的事件执行一次的任务。

1)在某一天执行一个脚本

[root@centos7 xx]# at 2020-3-25
at> /bin/aa.sh
at> 
job 2 at Wed Mar 25 15:31:00 2020

我们这里的时间只精确到了天,则任务执行的具体时间是提交任务的时间点(指定的那天)。例如这个例子,任务执行的时间点在2020-3-25的15:31:00。

注意,提交计划任务,使用 Ctrl+D 。

2)指定具体执行时间

[root@centos7 xx]# at 10:00 2020-3-25   
at> /bin/aa.sh
at> 
job 3 at Wed Mar 25 10:00:00 2020

注意,具体时间只能精确到分(不能精确到秒),时间是采用的24小时制。

3)一段时间之后执行

[root@centos7 xx]# at 4:00 + 1weeks
at> /bin/aa.sh
at> 
job 4 at Mon Mar 30 04:00:00 2020

一周后的那天的早上4点执行。时间单位有:minutes, hours, days, weeks。如果在某段时间后的此时执行,可以使用 at now + 3days 。

4)查看已存在的计划任务

[root@centos7 xx]# atq
2       Wed Mar 25 15:31:00 2020 a root
3       Wed Mar 25 10:00:00 2020 a root
4       Mon Mar 30 04:00:00 2020 a root
6       Thu Mar 26 15:38:00 2020 a root
[root@centos7 xx]# at -l
2       Wed Mar 25 15:31:00 2020 a root
3       Wed Mar 25 10:00:00 2020 a root
4       Mon Mar 30 04:00:00 2020 a root
6       Thu Mar 26 15:38:00 2020 a root

5)如何查看at计划任务具体执行的内容

cd /var/spool/at
[root@centos7 at]# ls
a0000201931e03  a0000301931cb8  a0000401933770  a00006019323aa  spool

可以看到,所有计划任务对应的文件,第5位的数字对应计划任务的编号。我们可以打开文件:

[root@centos7 at]# cat a0000201931e03 
#!/bin/sh
# atrun uid=0 gid=0
...
...
${SHELL:-/bin/sh} << 'marcinDELIMITER59a4f86f'
/bin/aa.sh

在最后,我们可以看到我们执行的脚本是 /bin/aa.sh 。

6)删除at计划任务

[root@centos7 at]# atrm 2
[root@centos7 at]# at -d 3

使用atrm或at -d加上任务编号就可以删除。

删除1-6号任务:

atrm {1..6}

7)计划任务的权限

如果我们不想让某个用户拥有做计划任务的权限,可以编辑 /etc/at.deny :

leo
kale

将需要拒绝的用户名写到文件中,一行一个用户名。

如果想让leo用户恢复权限,可以从at.deny中删除leo,或者创建一个叫at.allow的文件,将leo写进去。at.allow的优先级高于at.deny。

2.crontab计划任务

Crontab计划任务是周期性运行的计划任务。

1)查询已存在的crontab任务

crontab -l  # 查询当前用户的任务
crontab -l -u leo  # 查询leo用户的任务

2)编辑crontab任务

crontab -e  # 编辑当前用户的任务
crontab -e -u leo  # 编辑leo用户的任务

使用crontab -e会自动打开一个文件,该文件存在于 /var/spool/cron 目录下,名字为对应的用户名。例如, /var/spool/cron/root 。

3)crontab内容格式

# 格式如下
# 分            时            日            月            周                命令
0                7              *             *             *                 /bin/aa.sh    # 每天早上7点0分运行一次
0                7              *             *             1,2,3,4,5      /bin/aa.sh   # 每周1到5的早上7点0分运行一次
0                7              *             *             1-5              /bin/aa.sh   # 同上
0                7              *             *             1-5/1           /bin/aa.sh   # 同上,1为步长
0,5,10,30        7              *             *             *                 /bin/aa.sh   # 每天早上7:00,7:05,7:10,7:30各运行一次
0-10/5,30        7              *             *             *                /bin/aa.sh   # 同上
0                 7              *             1-12/2     *               /bin/aa.sh  # 奇数月的每天早上7:00运行一次
0                 7              *             2-12/2     *               /bin/aa.sh  # 偶数月的每天早上7:00运行一次

如果要实现每个月最后一天执行任务呢?每个月的天数可能是28、29、30、31。

# 分            时            日            月                        周                命令
0               7             31           1,3,5,7,8,10,12           *                /bin/aa.sh    # 在1,3,5,7,8,10,12月的31号运行
0               7             30           4,6,9,11                     *                /bin/aa.sh    # 在4,6,9,11月的30号运行
0               7             28           2                                *                /bin/aa.sh    # 2月28日运行一次,如果是闰年,则在27号被修改为29号
0               7             27           2                                *                /bin/bb.sh    # 在2月27号的时候运行bb.sh,判断是否是闰年,如果是闰年,就修改该文件前一条的28日为29日。

4)删除cron任务

crontab -r  # 删除当前用户的所有crontab任务

5)拒绝某个用户创建crontab任务

同at任务一样,在/etc/cron.deny中添加用户名即可。

vim /etc/cron.deny

leo  # leo用户不能创建crontab任务

如果要允许某个用户创建crontab,和at任务一样,从cron.deny中删除用户名,或添加一个cron.allow文件,写入用户名。

6)/etc下的其他与cron相关文件

[root@centos7 etc]# ls /etc/cron*
/etc/cron.deny  /etc/crontab

/etc/cron.d:
0hourly  raid-check  sysstat

/etc/cron.daily:
logrotate  man-db.cron  mlocate

/etc/cron.hourly:
0anacron  mcelog.cron

/etc/cron.monthly:

/etc/cron.weekly:

可以看到,除了cron.deny,还有cron.daily、cron.hourly、cron.monthly、cron.weekly,这些文件中都是保存对应周期要执行的任务。

cron.d中的sysstat是每隔一段时间收集系统状态数据,内容如下:

[root@centos7 etc]# cat cron.d/sysstat 
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

即,每隔10分钟,执行以下sa1命令,收集数据。

 

===

你可能感兴趣的:([RH134] 3-计划任务)