计划任务

为何要设置计划任务

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

计划任务的命令

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

一次性计划at和batchcentos

at命令

删除at计划任务
 at -dbash

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

batch命令

做用:
  安排一个或多个命令在系统负载较轻进运行一次(通常状况下负载较轻指平均负载降到0.8如下)url

使用方法同atcentos7

周期性计划命令crontab

  做用:用于生成cron进程所须要的crontab文件spa

crontab命令:日志

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

-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秒执行一次

* * * * *  for min in 0 1 2; do echo "hi"; sleep 20 ; 
done实现每秒执行
#vim test.sh
#!/bin/bash
while true ;do
sleep 1
echo "hello"
done
#crontab –e
* * * * *   /root/test.sh >> /data/mail
#cat /data/mail
练习 ①每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为“/etc-yyyy-mm-dd-hh.tar.gz” # crontab -e 0 */12 * * * tar -zcf  /etc-`date +\%F-\%H`.tar.gz  /backups ②每周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
相关文章
相关标签/搜索