• linux定时任务


    计划任务

    • 创建和管理在指定时间自动执行的任务
    • 注意:要使任务在执行时间自动执行,计划任务的服务必须是启动的
     

    计划任务进程分类

    • atd进程:需要使用at命令调用,只能执行一次(一次性的)
    • crond进程:需要使用crontab命令调用,可以设置周期性执行(每天、每周)(可重复)

     

    一次性计划任务

     
    (1)at命令
    既然at命令可以调用atd进程,那么我们就可以查看atd进程
    [root@oracle ~]# ps -ef |grep atd
    rpcuser    905     1  0 08:54 ?        00:00:00 rpc.statd
    root      1274     1  0 08:54 ?        00:00:00 /usr/sbin/atd
    root     23178 22888  0 13:53 pts/3    00:00:00 grep atd
    • 在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务
    • 系统服务的名称:/etc/init.d/atd
    • 设置格式:at [HH:MM] [yyyy-mm-dd]
      • 后面[yyyy-mm-dd]如果不写,就表示当天的执行任务
     
    事例:
        
    [root@oracle hang]# at 14:09
    at> touch lihanghang
    at> <EOT>
    job 1 at 2017-06-18 14:09
    [root@oracle hang]#

    at后面输入时间之后直接回车,然后输入我们想要定时执行的命令,退出的时候Ctrl+D
     
    (2)atq命令
    • 用途:查看当前设置的at任务列表(启动atd服务)
    • 同:at -l
    当有一个任务还咩有执行的时候,我们通过这个命令就可以查看到
    [root@oracle hang]# atq
    1    2017-06-18 14:09 a root
     
    (3)atrm命令
    • 用途:删除执行任务编号的at任务
    • 格式:atrm 编号
    • 同:at -d
    [root@oracle hang]# at 14:23
    at> touch a
    at> <EOT>
    job 4 at 2017-06-18 14:23
    [root@oracle hang]# atq
    4    2017-06-18 14:23 a root
    [root@oracle hang]# atrm 4
    [root@oracle hang]# atq

    设定一个定时任务之后,通过命令atq查看任务列表,得到任务编号之后,通过atrm命令将定时任务删除
    (4)at -c 任务号
    • 查看任务的具体内容
     
    (5)at命令的常用格式
    • at [HH:MM]
    • at [HH:MM] [yyyy-mm-dd]
    • at now +数字 [minutes|hours|day|weeks]
    at now 5 minutes:表示五分钟之后执行
     
    (6)at 时间 -f文件
    • 使用文件中的命令作为计划任务
    • at now +5 minutes -f /root/test.sh
     
    (7)at计划任务文件位置
    • /var/spool/at/a开头的文件
    • 任务执行完毕,文件消失
    [root@oracle kernel]# cd /var/spool/at/
    [root@oracle at]# ls
    a00006017ce6f5  spool
     
    [root@oracle at]# at -d 6
    [root@oracle at]# ls
    spool

    当将这个执行计划删除之后这个任务文件就紧接着消失了
     
    (8)at计划任务文件位置
    • /etc/at.deny:只有改名单里面的人不可以使用
    • /etc/at.allow:只有该名单里面的人可以使用
     
     

    周期计划任务

     
    查看crond进程信息
    [root@oracle etc]# ps -ef |grep crond
    root      1263     1  0 08:54 ?        00:00:00 crond
    root     23419  1331  0 14:51 pts/0    00:00:00 grep crond
    (1)crontab命令
    • 按照预先设置的时间周期(分钟、小时、天....)重复执行用户指定的命令操作,属于周期性计划任务
    • 服务名称:/etc/init.d/crond
    • 主要设置文件:用户定义的设置,位于文件:/var/spool/cron/用户名
      • 那个用户创建的计划任务,计划任务就在那个用户下面
     
    (2)cron服务配置文件
    • 位于文件:/etc/crontab
    • 系统cron就在该文件定义,是为了维护系统能够正常运行的,任务的格式也和用户cron有点不同,多了一个username
    • crond计划任务里面的命令有时候可能不会执行,因为cron的环境变量PATH跟系统PATH不太一样,他的PATH的默认值为PATH=/sbin:/bin/:/usr/sbin:/usr/bin,所以这就造成很多命令不能使用,所以解决的办法有两个,可以自己设定cron的PATH环境变量,也可以用命令的绝对路径,比如ls 我们可以使用:/bin/ls
     
    文件crontab的内容
     
    [root@oracle etc]# cat crontab
    SHELL=/bin/bash
    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
     
    前面四个等于,相当于定义了四个变量
    文件内容很像脚本,这个的PATH路径,如果我们输入执行的命令不在PATH下的文件夹下面,使用的时候就需要使用绝对路径了
     
    crontab只会在/sbin、/bin、/usr/sbin、/usr/bin下查找命令,如果命令不在这些目录中,应该要使用绝对路径
     
    这里定义了格式是什么,
    第一个*:代表分钟,范围是0~59
    第二个*:代表了小时,范围是0~23
    第三个*:代表了日期天,范围是0~31
    第四个*:代表了月份,范围是1-12
    第五个*:代表了星期,范围是0-6
    
    (3)cron服务的日志文件
    • 位于文件:/var/log/cron
     
    (4)管理cron计划任务
    • 编辑计划任务:crontab -e [-u 用户名]
    • 查看计划任务:crontab -l [-u 用户名]
    • 删除计划任务:crontab -r [-u 用户名]
     
    (5)时间数值的特殊用法
    • *:表示该范围内的任意时间
    • ,:表示间隔的多个不连续时间
    • -:表示一个连续的时间范围
    • /n:指定间隔的时间频率
     
    示例:
    • 0 17 * * 1-5    周一到周五每天17:00
    • 30 8 * * 1,3,5  每周一、三、五的8:30
    • 0 8-18 * * *    八点到18点整
    • 0 12 */3 * *    每隔3天的12点整
     
    (6)每天早上7:50自动开启sshd服务,22:50自动关闭
    • 执行crontab -e命令之后,就会进入编辑界面
    • 添加50 7 * * * service sshd start和50 22 * * * service sshd stop两行内容保存并退出
    • 查看计划任务:
      • [root@oracle db_1]# crontab -l
      • 50 7 * * * service sshd start
      • 50 22 * * * service sshd stop
    • 查看计划任务文件位置,并查看内容
      • [root@oracle cron]# pwd
      • /var/spool/cron
      • [root@oracle cron]# cat cron
      • 50 7 * * * service sshd start
      • 50 22 * * * service sshd stop
    • 注意:这里我们要使用which命令查看计划任务命令是否在/sbin、/bin、/usr/sbin、/usr/bin下,否则我们要是会用绝对路径
     
     

    周期计划任务注意事项

     
    (1)资源分配不均
    • 多个计划任务同时运行
      • 如果多个任务同时运行,可能就会占用太多的cpu资源,可能就会导致系统夯住
     
    (2)安全检查
    • 防止有非法计划任务
      • 定时检查一下执行任务,防止有人添加非法的计划任务
     
    (3)周和日、月不可同时并存
    • 容易导致计划任务时间混乱
      • 防止我们设置的几月几号没有这个时间点
     
     
    anacron程序
    • 弥补cron在系统关机后不能执行计划任务的问题
    • 不能替代cron
    • 会被每个小时被执行一次,脚本在/etc/cron.hourly
    • 按天、周或月为单位去检查系统未进行的cron任务
    • /var/spool/anacrom 
    • 服务名称:/etc/init.d/anacrond 
    • 开机时自动运行,然后将未执行的计划任务执行一遍后,anacron就会自动停止,所以我们在查看这个进程的时候就找不到,但是cron进程可以找到
      • [root@oracle etc]# ps -ef |grep anacrontab
      • root      1637  1415  0 23:57 pts/1    00:00:00 grep anacrontab
      • [root@oracle etc]# ps -ef |grep cron
      • root      1302     1  0 22:35 ?        00:00:00 crond
      • root      1643  1415  0 23:57 pts/1    00:00:00 grep cron
    [root@oracle anacron]# ls
    cron.daily  cron.monthly  cron.weekly
    [root@oracle anacron]# pwd
    /var/spool/anacron
     
    (1)系统自带的计时任务存放目录,使用anacrond
    [root@oracle etc]# ls cron
    cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ crontab       cron.weekly/
     
    (2)anacron服务配置文件
    • 位于文件:/etc/anacrontab
    查看这个配置文件
     
    [root@oracle etc]# cat /etc/anacrontab
    # /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
     
    1:任务频率
    5:延迟时间
    cron.daily:任务名称
    /etc/cron.monthly:执行命令
    run-parts:这个选项会将/etc/cron.daily目录下的文件全部执行
     
    开机要执行的命令或者脚本应该添加到
    • /etc/rc.local
    • 是一个链接文件,链接到改目录下的rc.d/rc.local
    [root@oracle etc]# ll /etc/rc.local
    lrwxrwxrwx. 1 root root 13 Dec 24 12:36 /etc/rc.local -> rc.d/rc.local
    • 所以如果我们要开机执行命令就vi这个文件,并在里面添加内容
    [root@oracle etc]# vi rc.local
    #!/bin/sh
    #
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.
    touch /var/lock/subsys/local

     2017-06-20

  • 相关阅读:
    阿里DatatX mysql8往 Elasticsearch 7 插入时间数据 时区引发的问题
    通俗易懂 k8s (3):kubernetes 服务的注册与发现
    ReplicaSet 和 ReplicationController 的区别
    使用Go module导入本地包
    k8s之statefulset控制器
    终于成功部署 Kubernetes HPA 基于 QPS 进行自动伸缩
    Atitit drmmr outline org stat vb u33.docx Atitit drmmr outline org stat v0 taf.docx Atitit drmmr out
    Atitit all diary index va u33 #alldiary.docx Atitit alldiaryindex v1 t717 目录 1. Fix 1 2. Diary deta
    Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map >> spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
    Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL) 1 1.1. 8.2 功能概述 1 1.2. Ongl
  • 原文地址:https://www.cnblogs.com/hanglinux/p/7051276.html
Copyright © 2020-2023  润新知