iMisty的技术栈

iMisty的技术栈

Linux系统管理之定时任务

975
2019-05-16

Linux系统管理之定时任务

at定时任务

确定 at 安装

  • chkconfig --list |grep atd 检查 at 服务是否安装

  • service atd restart 启动atd服务;

很多服务 例如 httpd ,d是deamon 守护进程的意思,将这个程序当做系统的服务运行在系统的后台;

at的访问控制

img

/etc/at.deny 可以为空,但是一定要有;不然只有root用户可以使用

at 命令

at [选项] 时间

  • 选项 : -m 当at工作完成之后,无论命令是否有输出,都用email通知执行at命令的用户

  • -c 工作号 显示该at工作的实际内容

时间:

  • HH:MM 例如:02:30
    _ HH:MM YYYY-MM-DD 例如:02:30 2019-03-07
    _ HH:MM [am|pm] [month] [date] 例如:02:30 July 25

  • HH:MM [am|pm] +[minutes|hours|days|weeks] 例如:now + 5 minutes

  • 例子1at now + 2 minutes 在两分钟之后执行hello.sh脚本 at> /root/hello.sh >> /root/hello.log

    #!/bin/bash
    echo "helloooooo " >> /root/hello.log

    # chmod 755 hello.sh
    # ./hello.sh 
  • 例子2 在指定的时间重启,不推荐重启这样的复杂操作由计算机完成,一旦重启失败,影响正常工作,重启建议直接由管理员完成
    # at 02:00 2019-03-07 
    /bin/sync #数据同步将内存缓存写入磁盘
    /sbin/shutdown -r now

img

提示:若是退格键无效,使用ctrl +退格键

其他的at管理命令

  • atq查询当前服务器上的at工作, at -c [任务号]查看具体的工作内容
  • atrm [工作号] 删除指定at任务

crontab 循环定时任务

crond 服务管理与访问控制

  • service crond restart 启动服务
  • chkconfig crond on 查看crond服务是否正确安装是否启动
  • chkconfig --list |grep cron* service crond status 查看服务运行状态

cronfd访问控制

img

如果配置文件中既有allow也有deny,则deny生效allow不生效,若是只有deny,那么写入deny的用户无法使用,对root用户无效
deny可以为空,但是一定要有;

用户的crontab设置

  • crontab [选项]

    • -e编辑crontab定时任务 ,默认以当前登录的用户绑定在命令当中,需要考虑到当前用户的权限,权限不够的命令无法正确执行
    • -l 查询crontab任务* -r 删除当前用户所有的crontab任务
  • 例子 crontab -e 进入crontab 编辑界面 ,会打开vim编辑捏工作

  • ***** 执行的任务 可以是单独的命令,也可以是写好了的shell脚本

    img

    img

    img

  • */5 **** /bin/echo "111" >> /tmp/test 每五分钟输出一段字符到指定文件

  • 55**2 /sbin/shutdown -r now 每周二的五点五分 重启

  • 05**2 /root/bak.sh 每周二的五点整执行一次备份,因为4-5点的访问流量最少

    注意:定时任务的最小识别时间是分钟,最大识别时间是月,不能识别秒和年单位

    crontab其他常用命令

  • crontab -l 查看root用户的crontab任务

  • crontab -r 删除root用户所有的定时任务,如果只想清除一个 直接crontab -e编辑任务然后清除即可

    crontab命令的注意事项

    img

    whereis [命令] 查看命令的路径;定时任务执行的环境变量不一定和当前用户的环境变量完全一致,所以要写绝对路径

    系统的crontab设置

  • crontab -e 是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务,可是有些定时任务需要系统执行,这时我们需要编辑/etc/crontab这个配置文件了

    • 可以自由定义用户身份而不用必须绑定当前的用户上* centos 5 中的配置文件,简化脚本书写,直接写在相应的配置文件中,方便管理直接可以查看到在什么样的时间执行了什么样的工作
      img
    • 在linux的演进过程中配置文件发生了改变,较高版本的linuxcrontab不再管理cron.weekly等配置文件,由更加先进的anacron管理

    执行系统定时任务的方法

  • 手工执行定时任务,crontab命令定义

  • 系统定时任务

    • 第一种是把需要定时执行的脚本复制到/etc/cron.{hourly|daily|weekly|monthly}文件中的任意一个
    • 第二种是修改/etc/crontab文件
    vim /etc/crontab
    5 5 * * * root /root/hello.sh  
    #以root用户的身份每天五点零五分执行脚本

手工命令执行脚本任务执行起来只能通过crontab -e 查询,修改配置文件的方式直接查看编辑文件即可,其实也差不多;
推荐直接使用周期配置文件的方式定义定时任务,更加稳定可靠;管理方便,打开就能看到定时任务;因为anacron机制,有一个补救措施

anacron 配置

  • anacron 是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后运行;

注意:只有在配置文件中配置的定时任务才会执行,通过命令编辑的命令是不会执行的,所以推荐使用配置文件来定义系统定时任务;

不需要用户参与,方便且可靠

anacron的检测周期

  • anacron 会使用一天,七天,一个月作为检测周期

  • 在系统的/var/spool/anacron/目录中存在cron.{daily|weekly|monthly}文件,用于记录上次执行cron的时间

  • 小时的时间间隔较短,不支持这种方式

  • 和当前时间作比较,如果两个时间的差超过了anacron的指定时间差值,证明有cron任务被执行

centos 6.x的区别

  • 在老的centos版本中,/etc/cron.{daily|weekly|monthly} 这些目录既会被cron调用,也会被anacron调用,容易重复执行

  • 在centos 6.x中只会被anacron调用,避免了重复执行

    *   也就是cron的配置文件里面不再调用`/etc/cron.{daily|weekly|monthly}`这些文件
    
    *   centos6.x中anacron不再是服务,而是系统命令
    
    *   之前需要检测当前服务是否在运行,如果没有运行则需要启动,现在直接作为系统命令执行即可
    

anacron配置文件

  • anacron调用定时任务的配置,保证正常执行,不会受到服务器宕机影响

img

  • 分别配置超过一天一个星期一个月调用的命令

nice 命令指定优先级,这里其实使用的默认的优先级;run-parts 就是指的命令的执行以run-parts脚本调用,这个工具使用C语言编写,执行效率比shell略高

  • 以cron.daily工作为例来说明执行过程,一开机就检测上一次的执行时间,时间差超过一天一星期一个月分别调用指定的定时任务脚本

    img

    其实anacron命令不需要用户调用,了解定时任务的执行原理即可;

  • 但是有一个缺点:执行的时间不确定,有个强制延迟和随机延迟,不可控,但是给了系统宕机一个补救措施