zoukankan      html  css  js  c++  java
  • linux下计划任务学习记录

    0x01 计划任务简介

    linux 中计划任务主要分为”循环执行”和”只执行一次”两种,分别对应的时 crond 服务 和 atd 服务;

    0x02 只执行一次的计划任务

    0x02.1 atd 服务说明

    atd 服务会轮训计划任务的文件,也就是我们用at 或者 batch 命令下达的任务,都会以文件的形式存储在系统中,其中:

    在ubuntu系统下存在:

    1
    2
    /var/spool/cron/atjobs
    /var/spool/cron/atspool

    在Centos系统下存在:

    1
    /var/spool/at/

    PS: 若是没有安装请用对应系统地包管理器进行安装

    0x02.2 atd 服务开启:

    配置 atd 服务的权限:

    • 首先寻找 /etc/at.allow 这个文件,只有写在这个文件里面的用户才能使用 at, 没有写在这个文件里面的用户不能使用(即使它也没被写在/etc/at.deny)中;
    • 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,写在这个 at.deny 的用户不能使用 at;
    • 如果这两个文件都不存在则只能 root 用户使用 at;

    确保 atd 服务开启:

    1
    2
    /etc/ini.d/atd status
    /etc/ini.d/atd start

    设置 服务的开机自启动:

    1
    chkconfig atd on

    0x02.2 at,atq,atrm,bath命令

    1
    2
    3
    4
    5
    6
    7
    Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
    at [-V] [-q x] [-f file] [-mMlbv] -t time
    at -c job ...
    atq [-V] [-q x]
    at [ -rd ] job ...
    atrm [-V] job ...
    batch

    参数说明:

    >

    • -V 显示版本信息
    • -q<列队> 使用指定的列队
    • -f<文件> 从指定文件读入任务而不是从标准输入读入
    • -m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
    • -M 永远不发送任何邮件
    • -l atq的别名
    • -d atrm的别名
    • -r atrm的别名
    • -b batch.的别名
    • -v 显示任务将被执行的时间
    • -t<时间参数> 以时间参数的形式提交要运行的任务

    示例1: 三天后的下午 5 点锺执行/bin/ls 命令

    1
    2
    3
    4
    5
    [root@localhost ~]# at 5pm+3 days
    at> /bin/ls > /tmp/daodaoliang
    at> <EOT>
     
    job 1 at 2016-03-10 14:27:47

    示例2: 明天下午5:20执行一个脚本

    1
    2
    [root@localhost ~]# at -f /tmp/daodaoliang.sh 17:20 tomorrow
    job 8 at 2016-03-10 14:31:25

    示例3: 查询当前任务信息

    1
    2
    3
    4
    5
    atq
     
    或者
     
    at -l

    然后

    1
    at -c <任务号码>

    示例4: 删除某指定任务

    1
    2
    3
    4
    5
    atrm <任务号码>
     
    或者
     
    at -r <任务号码>

    示例5: 从现在开始的系统闲暇时间执行一个脚本

    1
    2
    3
    4
    5
    batch now -f /tmp/daodaoliang.sh
     
    或者
     
    batch -f /tmp/daodaoliang.sh -b now

    PS: 空闲指的是 在CPU 的工作负载小于 0.8 的时候;

    0x03 循环执行的计划任务

    0x03.1 crond服务说明

    crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

    crond 执行的计划任务主要分为如下两类:

    • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
    • 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

    0x03.2 crond服务开启

    1
    2
    /etc/ini.d/crond startus
    /etc/ini.d/crond start

    设置 服务的开机自启动:

    1
    chkconfig crond on

    0x03.3 crond服务配置

    • 若 /etc/cron.allow 存在, 在这里面写入的用户则可以使用 crontab;
    • 若 /etc/cron.deny 存在,在这里面写入的用户则不可以使用 crontab;
    • 若这两个都不存在则看系统地配置参数了,要么只有超级管理员可以用,要么谁都可以用,一般来说,只要保留 etc/cron.deny 即可;

    0x3.4 计划任务的说明

    系统的计划任务写在如下路径文件里面:

    >

    • /etc/crontab 文件(ubuntu系统可能不存在这个文件)
    • /etc/cron.d/ 文件夹下的文件
    • /etc/cron.hourly/ 文件夹下的文件
    • /etc/cron.daily/ 文件夹下的文件
    • /etc/cron.weekly 文件夹下的文件
    • /etc/cron.monthly 文件夹下的文件

    用户自己的计划任务希望在如下的文件里面:

    >

    • /var/spool/cron/<用户名字> 文件夹内的文件

    总体来说按照用户和用途的不同需要按照以下来使用:

    >

    • 用户自己的计划任务直接用 crontab -e 来创建,这样能保证创建的指令行为不会被其他人看见;
    • 系统维护使用 /etc/crontab 如果这个计划任务是比较重要系统计划任务,为了管理方便,同时易于追踪则直接写入 /etc/crontab比较方便;
    • 自己开发的系统软件,最好是编写新的计划文件放到 /etc/cron.d/newfile 来进行管理比较方便
    • 固定,小时、天、周等执行的工作,如果与系统维护有关则直接写在 /etc/crontab 集中管理比较好,当然也可以偷懒写在上述的几个特殊的文件夹里面;

    0x3.5 crontab 格式说明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SHELL=/bin/bash <==使用哪種 shell 介面
    PATH=/sbin:/bin:/usr/sbin:/usr/bin <==執行檔搜尋路徑
    MAILTO=root <==若有額外STDOUT,以 email將資料送給誰
     
    # 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

    0x3.6 anacron 的说明

    anacron 只是一个程序并非一个服务,他会每小时被 crond 执行一次:

    • 在 centos 下面对于它的配置在 /etc/cron.hourly/0anacron

    • 在 ubuntu 下面对于他的配置在 /etc/cron.d/anacron

    anacron 配置文件的说明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # /etc/anacrontab: configuration file for anacron
     
    # See anacron(8) and anacrontab(5) for details.
     
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    HOME=/root
    LOGNAME=root
     
    # These replace cron's entries
    1 5 cron.daily run-parts --report /etc/cron.daily
    7 10 cron.weekly run-parts --report /etc/cron.weekly
    @monthly 15 cron.monthly run-parts --report /etc/cron.monthly

    配置文件中的四列分别的意思为

    >

    • 第一列 天数 anacron 与 上次记录相差的天数,若是超过这个天数则就准备开始执行,若没有超过这个天数则不予执行;
    • 第二列 延迟时间 (单位时分钟) 在上述超过天数后再进行执行计划任务,为了避免系统拥堵则延迟一定时间开始执行;
    • 第三列 工作名称 这个计划工作的名字,这个可以自定义;
    • 第四列 实际要运行的指令 比如 run-parts /etc/cron.daily 就是要运行在 指定目录下的所有脚本, 通常该脚本的路径 和 crond 的文件路径相同;

    所以如果你需要确保某些命令执行则需要进行修改 /etc/anacron 文件;

    参考链接:

    1. http://linux.vbird.org/linux_basic/0430cron.php
    2. http://blog.sina.com.cn/s/blog_6561ca8c0101ab83.html
    3. http://www.jb51.net/LINUXjishu/74014.html
    4. http://blog.csdn.net/richerg85/article/details/23442411
    5. http://www.linuxfly.org/post/11/

    http://daodaoliang.com/linux%E5%AD%A6%E4%B9%A0/2016/03/10/linux%E5%AD%A6%E4%B9%A0-2016-03-10-linux%E4%B8%8B%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/

  • 相关阅读:
    高通电池曲线(转)
    随笔分类
    海思uboot启动流程详细分析(转)
    GPRS以TCP上传数据到服务器OK,但收不到服务器下发的数据
    WIS800C TCP Client 非透传模式连接远程服务器使用方法(转)
    MySQL 不允许从远程访问的解决方法
    Linux下将Mysql和Apache加入到系统服务里的方法
    linux服务器出现严重故障后的原因以及解决方法
    Linux防火墙该如何设置
    Linux下的两个聊天命令的使用方法
  • 原文地址:https://www.cnblogs.com/findumars/p/7002898.html
Copyright © 2011-2022 走看看