• Linux之计划任务


    作业管理:

    Linux的作业控制:

        前台作业:通过终端启动,且启动后一直占据终端

        后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

    如何让作业运行与后台?    

        运行总的作业:  ctrl+z

        尚未启动的作业: COMMAND &

    后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业,如果希望送往后台要剥离终端的关系

        

    nohup COMMAND &    或  screen;COMMAND

    查看所有作业:

        jobs

    作业控制:

        fg [[%]JOB_NUM]:把指定的后台作业调回前台; 

        bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行;

        kill [%JOB_NUM]:终止指定的作业;

    并行运行:

    同时运行多个进程,提高效率,有三种方法

    (1)

        vim all.sh

        f1.sh&

        f2.sh&

        f3.sh&

    (2)

        (f1.sh&);(f2.sh&);(f3.sh&)

    (3)

        { f1.sh& f2.sh& f3.sh& }

    进程的优先级:

    进程优先级调整:

        静态优先级: 100-139

        进程默认启动时的nice值为0,优先级为120

        只有根用户才能降低nice值(提高优先性)

    nice 命令:

    nice [OPTION] [COMMAND [ARG]...] 

    renice 命令:

    renice [-n] priority pid ...

    查看;

    ps axo pid,comm,ni

    计划任务:

    Linux任务计划,周期性任务执行

    未来的某时间点执行一次任务

    •     at
    •     batch :系统自行选择空闲时间去执行此处指定的任务周期性运行某任务
    •     cron

    at 命令: at [option] TIME

    常用选项:

        -V :显示版本信息

        -l :列出指定队列中等待运行的作业

        -d :删除指定的作业,相当于 atrm

        -c :查看具体作业任务

        -f /path/from/somefile :从指定的文件中读取任务

        -m :当任务被完成后,将给用户发送邮件,即使没有标准输出

    注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

    TIME : 定义出什么时候进行at这项任务的时间

    HH:MM [yyyy-mm-dd]

    noon,midnight,teatime(4pm)

    tomorrow

    now+#{minutes,hours,days,weeks}

    HH:MM 02:22

        在今日的HH:MM 进行,若该时刻已过,则明天此时执行该任务

    HH:MM yyyy-MM-DD 04:30 2016-09-20

        规定在某年某月的某一天的特殊时刻进行该项任务

    HH:MM[am|pm][Month][Date]

        04pm March 17

        17:20 tomorrow

    HH:MM[am|pm] + number [minutes|hours|days|weeks]

        在某个时间点再加几个时间后才进行该项任务

        now + 5 minutes

        04pm + 3 days

    at任务:

    执行方式:

    1)交互式    2)输入从定向    3) at -f 文件

    依赖与atd服务,需要启动才能实现at任务

    at队列存放在 /var/spool/at 目录中

            通过 /etc/at.{allow,deny}控制用户是否能执行at任务;先寻找 /etc/at.allow 文件,文件中的使用者才能使用at,没有在这个文件中的使用者则不能使用at(即使没有写在 at.deny 当中),如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者则可使用 at 命令


    at 的三种方式添加任务

    1) 

    1. [root@localhost Desktop]# at 20:00
    2. at> ls /
    3. at>             # ctrl+d 结束
    4. job 7 at 2016-09-09 20:00
    5. [root@localhost Desktop]# at -l    #查看队列中将要运行的任务
    6. 7 2016-09-09 20:00 a root

    2) 文件重定向

    1. [root@localhost Desktop]# echo "ls /" > k.txt
    2. [root@localhost Desktop]# cat k.txt 
    3. ls /
    4. [root@localhost Desktop]# at 21:00 < k.txt
    5. job 8 at 2016-09-09 21:00
    6. [root@localhost Desktop]# at -l
    7. 82016-09-09 21:00 a root
    8. 72016-09-09 20:00 a root

    3) 直接读取文件,和文件重定向差不多

    1. [root@localhost Desktop]# at 22:00 -f k.txt
    2. job 9 at 2016-09-09 22:00
    3. [root@localhost Desktop]# at -l
    4. 92016-09-09 22:00 a root
    5. 82016-09-09 21:00 a root
    6. 72016-09-09 20:00 a root


    周期性任务计划: cron

        相关的程序包

        cronie :主程序包,提供crond守护进程及相关辅助工具

        cronie-anacron:cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次该任务

        crontabs :包括CentOS 提供系统维护任务

    首先确保crond守护进程处于运行状态

        CentOS 7 : systemctl status crond

        CentOS 6 : service crond status

    计划周期性执行的任务提交给crond,到指定时间会自动运行

        系统cron任务 : 系统维护作业

            /etc/crontab

        用户cron任务:

            crontab 命令

    日志: /var/log/cron

    系统 cron 任务: /etc/crontab

    注释行以 # 开头 ,详情参见 man 5 crontab

    1. [root@centos7 Desktop]# cat /etc/crontab 
    2. SHELL=/bin/bash
    3. PATH=/sbin:/bin:/usr/sbin:/usr/bin
    4. MAILTO=root
    5. # For details see man 4 crontabs
    6. # Example of job definition:
    7. # .---------------- minute (0 - 59)
    8. # |  .------------- hour (0 - 23)
    9. # |  |  .---------- day of month (1 - 31)
    10. # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    11. # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    12. # |  |  |  |  |
    13. # *  *  *  *  * user-name  command to be executed
     
    

     例如晚上九点十分运行echo命令:

    12 21 * * * root /bin/echo "good"

    时间表示法:

    (1) 特定的值: 给定时间点有效取值范围内的值

    (2) *  : 给定时间点上有效取值范围内的所有值  表示"每..."

    (3) 离散取值 : #,#,#

    (4) 连续取值 : #-#

    (5) 在指定时间范围内上,定义步长 : */#  : # 表示步长

        比如: 每三个小时echo命令: 0 */3 * * * root /bin/echo "good"

    1. @reboot Run once after reboot.
    2. @yearly 0 0 1 1 *
    3. @annually     0 0 1 1 * 
    4. @monthly 0 0 1 * * 
    5. @weekly 0 0 * * 0
    6. @daily 0 0 * * *
    7. @hourly 0 * * * *

    系统计划任务配置文件:

    /etc/crontab

    1. [root@centos7 cron.d]# ls -d1 /etc/cron.*
    2. /etc/cron.d
    3. /etc/cron.daily
    4. /etc/cron.deny        #拒绝名单,若有用户在此文件,则该用户没有权限添加计划任务
    5. /etc/cron.hourly
    6. /etc/cron.monthly
    7. /etc/cron.weekly

    anacron 系统 :

    运行计算机关机时cron不运行的任务,Centos6以后版本取消anacron服务,由crond服务管理

    假设计算机没有一直关机

    对笔记本,台式机,工作站及其他不一直开机的系统很重要

    对偶尔要关机的服务器很有用

    配置文件 :/etc/anacrontab 负责执行 /etc/cron.daily /etc/cron.weekly /etc/cron.monthly中的系统任务 ; /etc/cron.hourly 由 /etc/cron.d/0hourly 执行

    run-parts dir  :运行dir目录下所有的程序

    字段1:如果在这些日子里没有运行这些任务…… 

    字段2:在重新引导后等待这么多分钟后运行它

    字段3:任务识别器,在日志文件中标识

    字段4:要执行的任务

    当执行任务时,更新/var/spool/anacron/文件时间戳

    管理临时文件:

    rhel6.0使用/etc/cron.daily/tmpwatch定时清除临时文件。 

    rhel7.0使用systemd-tmpfiles-setup服务实现 

        配置文件: 

    1. /etc/tmpfiles.d/*.conf 
    2. /run/tmpfiles.d/*.conf 
    3. /usr/lib/tmpfiles/*.conf

        /usr/lib/tmpfiles.d/tmp.conf 

    1. d /tmp 1777 root root 10d 
    2. d /var/tmp 1777 root root 30d 

    命令:

    systemd-tmpfiles –clean|remove|create  configfile

    用户cron :

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

    crontab 命令:

    1. crontab [-u user] [-l | -r | -e] [-i] [-s]
    2.     -l : 列出所有任务
    3.     -e : 编辑任务
    4.     -r : 移除所有任务
    5.     -i : 同 -r 一同使用,以交互模式移除指定任务
    6.     -u user : 仅root可运行,指定用户管理cron任务

    控制用户执行计划任务,和at 命令类似

    /etc/cron.{allow,deny}

    at 和 crontab的区别

    一次性作业使用 at

    重复性作业使用 crontab

    at 和 crontab 命令区别
     Create at timecrontab -e
    Listat -lcrontab -l
    Details at -c jobnum
    Removeat -d jobnumcrontab -r
    Editcrontab -e

    没有被重定向的输出会被邮寄个用户

    根用户能够修改其他用户的作业

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

    (1) COMMAND > /dev/null

    (2) COMMAND &> /dev/null

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

    思考:

    (1) 如何在秒级别运行任务 ?

    * * * * * for min in 0 1 2; do echo "hi"; sleep 20; done

    (2) 如何实现每7分钟运行一次任务? 

    sleep命令: sleep NUMBER[SUFFIX]... 

        SUFFIX: s: 秒, 默认 m: 分 h: 小时 d: 天

    练习测试:

    1、每4小时备份一次/etc目录至/backup目录中,保存的文 件名称格式为“etc-yyyy-mm-dd-HH.tar.xz” 

    1. [root@localhost backup]# crontab -l
    2. 0 */4  * * * . /backup/etcback.sh
    3. [root@localhost backup]# cat etcback.sh 
    4. #!/bin/bash
    5. tar -Jcf /backup/etc-`date +%F-%H`.tar.xz /etc &> /dev/null

    2、每周2, 4, 7备份/var/log/messages文件至/logs目录中 ,文件名形如“messages-yyyymmdd” 

    1. [root@localhost bin]# cat backupmessage.sh 
    2. #!/bin/bash
    3. cp -a /var/log/messages /logs/messages-`date +%F |tr -d '-'`
    4. [root@localhost bin]# crontab -l
    5. 0 0 0 * 2,4,7 /usr/local/bin/backupmessage.sh

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

    1. [root@localhost bin]# crontab -l
    2. 0 */2 * * * /usr/local/bin/meminfo.sh
    3. [root@localhost bin]# cat meminfo.sh 
    4. #!/bin/bash
    5. cat /proc/meminfo | grep "^[SM]" >> /tmp/meminfo.txt

    4、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现 任何分区利用率高于80%,就执行wall警报

    1. [root@localhost bin]# cat walldisk.sh 
    2. #!/bin/bash
    3. num=`df | grep "/dev/sd.*" | tr -s ' '|cut -d' ' -f5|cut -d% -f1|sort -n |tail -1`
    4. if [ $num -gt 80 ];then
    5. wall "the disk will full"
    6. fi
    7. [root@localhost bin]# crontab -l
    8. */10 * * * * /usr/local/bin/walldisk.sh

  • 相关阅读:
    聊天机器人(Ajax实现聊天机器人接口的调用)
    飞天使-django之数据库简介
    openssl 常用命令demo
    SpringMVC简介
    golang 微服务的负载均衡
    Mybatis速成(二)
    【计算机网络】应用层——HTTP协议
    美国封锁激励中国制造业数字化转型的崛起 | 百能云芯
    前端开发面试题—JavaScript循环语句
    使用Bigemap计算挖填土石方量
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126312136