欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

计划任务

程序员文章站 2022-04-06 19:30:12
计划任务 为什么要设置计划任务 我们在系统的管理中,很多时候不是及时的去操作,比如对某一网站数据的备份,备份的过程需要占用大量的系统资源,凌晨三四点的时候系统访问用户最少,系统最空闲。但我们的系统的系统管理员总不能老那个时间爬起来操作吧。 计划任务的命令 计划命令分一次性计划和周期性计划。at 安排 ......

为什么要设置计划任务

  我们在系统的管理中,很多时候不是及时的去操作,比如对某一网站数据的备份,备份的过程需要占用大量的系统资源,凌晨三四点的时候系统访问用户最少,系统最空闲。但我们的系统的系统管理员总不能老那个时间爬起来操作吧。

计划任务的命令

  计划命令分一次性计划周期性计划
at    安排作业在某一时刻执行一次
batch 安排作业在系统负载不重时执行一次
cron 安排周期性运行的作业

一次性计划at和batch

at命令

删除at计划任务
 at -d

查看at计划任务
ls /var/spool/at/

batch命令

作用:
  安排一个或多个命令在系统负载较轻进运行一次(一般情况下负载较轻指平均负载降到0.8以下)

使用方法同at

周期性计划命令crontab

  作用:用于生成cron进程所需要的crontab文件

crontab命令:

crontab[-u user] [-l | -r | -e] [-i]

-l: 列出所有任务;

-e: 编辑任务;

-r: 移除所有任务;

-i:同-r一同使用,以交互式模式移除指定任务

-u user: 仅root可运行,指定用户管理cron任务

crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME

 

注意:运行结果的标准输出和错误以邮件通知给相关用户

 centos7 # systemctl status atd crond开机时需启动服务

                 systemctl enable atd crond  重启还是启动的

centos6 # service crond atd start开机时需启动服务

                 chkconfig --list atd crond开机启动确保为on状态

/var/spool/cron/ :存放用户的任务计划

 

/etc/cron.{allow,deny}  :控制用户创建任务计划黑白名单,同at原理一样

 

/var/log/cron :日志文件

 

/etc/cron.hourly/ :每小时执行的脚本

 

/etc/cron.daily/ :每天执行的脚本

 

/etc/cron.weekly/ :每周执行的脚本

 

/etc/cron.monthly/ :每个月执行脚本

 

计划任务
计划任务
[root@rhel6 ~]# cat /etc/crontab #配置文件
SHELL=/bin/bash #执行任务命令的shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin  #执行任务的环境变量
MAILTO=root  #执行任务的用户
HOME=/  #家目录

# For details see man 4 crontabs

# 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
计划任务
计划任务

 

时间通配表示:

 

  • *:对应时间的所有有效取值,每
  • ,:离散时间点,和
  • -:连续时间点,到
  • /:对应取值范围内多久一次,每隔

 

计划任务
计划任务
@reboot 		  :系统启动后执行
@yearly		0 0 1 1 * :每年的1月1号00:00执行一次任务
@annually	0 0 1 1 * :每年的1月1号00:00执行一次任务
@monthly	0 0 1 * * :每月的1号00:00执行一次任务
@weekly		0 0 * * 0 :每周日的00:00执行一次任务
@daily		0 0 * * * :每天的00:00执行一次任务
@hourly		0 * * * * :每小时执行一次任务
计划任务
计划任务

 

 

 

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义

思考:如何在秒级别运行任务?

  由于crontab最小时间单位为分钟,所以我们需要借用sleep命令使其“睡一会”,来实现秒级别,及不能整除时间单位的计划任务。

sleep命令:

 sleep NUMBER [SUFFIX]...

   SUFFIX:

    s: 秒, 默认

    m: 分

    h: 小时

    d: 天

如:每20秒执行一次

1
<span style="font-family: 宋体; font-size: 16px">* * * * *  for min in 0 1 2; do ech
计划任务
练习

①每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为“/etc-yyyy-mm-dd-hh.tar.gz”

# crontab -e
0 */12 * * * tar -zcf  /backups/etc-`date +\%F-\%H`.tar.gz  /etc
 

②每周2,4,7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;

# crontab -e 
 * * * * 2,4,7  cp -r /var/log/secure  /logs/secre-`date +\%F`
 

③每两个小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;

# crontab -e
  0 */2 * * * grep "^[SM].*"/proc/meminfo >> /tmp/meminfo.txt
 

④四月的第一个星期日早晨1点59分运行a.sh

# crontab -e
 59 1 1-7 4 * test `date +\%w` -eq 0 && bash a.sh
⑤工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报

# vim /testdir/disk.sh
#!/bin/bash
a=`df | grep  "^/dev/sd" | tr -s ‘ ‘ ‘%‘| cut -d% -f5 | sort -n  | tail -1`
if [ $a -gt 80 ];then
wall "The disk will be full"
fi
# chmod +x disk.sh
# crontab -e 
*/10 * * * 1-5 /testdir/disk.sh
计划任务