linux作业管理和任务计划

一、作业管理

Linux 的作业控制
    前台作业:通过终端启动,且启动后一直占据终端;
    后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
如何让作业运行于后台?
(1)  运行中的作业: Ctrl+z
(2)  尚未启动的作业:# COMMAND &后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系    # nohup COMMAND &    
    # screen;COMMAND查看所有作业:    # jobs
作业控制:
# fg [[%]JOB_NUM] :把指定的后台作业调回前台;# bg [[%]JOB_NUM] :让送往后台的作业在后台继续运行;# kill [%JOB_NUM] :终止指定的作业;

image

并行运行

同时运行多个进程,提高效率vi all.shf1.sh&
f2.sh&
f3.sh&
(f1.sh&);(f2.sh&);(f3.sh&)
# (echo 1&);(echo 2&);(echo 3&)
{ f1.sh& f2.sh& f3.sh& }

二、任务计划

Linux 任务计划、周期性任务执行
•  未来的某时间点执行一次任务:    at
    batch :系统自行选择空闲时间去执行此处指定的任务(可执行脚本)
•  周期性运行某任务:
    cron

at 任务

安装并启动at任务
# yum install -y at# runleve    查看系统服务等级# chkconfig --list atd   # chkconfig --level 3 atd on  启动服务#  ntsysv   GUI服务管理#  setup    GUI服务管理
at 命令:at [option] TIME
常用选项:
-V  显示版本信息:    -l:  列出指定队列中等待运行的作业;相当于atq    -d: 删除指定的作业;相当于atrm    -c:  查看具体作业任务    -f /path/from/somefile :从指定的文件中读取任务    -m: 当任务被完成之后,将给用户发送邮件,即使没有标准输出    -q QUEUE:指明队列注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
TIME: 定义出什么时候进行at这项任务的时间
HH:MM [YYYY-mm-dd]
noon, midnight, teatime (4pm)
tomorrownow+#{minutes,hours,days, OR weeks}
ctrl + d ;保存任务退出
at 时间格式
HH:MM 02:00在今日的HH:MM进行,若该时刻已过,则明天此时执行任务
HH:MM YYYY-MM-DD
04:00 2016-09-20
   规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
04pm March 1717: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命令。
       
如果两个文件都不存在有,只有 root 用可以使用at这个命令。
touch /etc/at.allow
/etc/at.allowlvasu tom

周期性任务计划cron

相关的程序包:cronie:主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie 的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron 会随后启动一次此任务
    
crontabs:包含CentOS提供系统维护任务

计划任务

确保crond 守护处于运行状态:
    CentOS 7:
        systemctl status crond
    CentOS 6:
        service crond status
计划周期性执行的任务提交给crond,到指定时间会自动运行。他需要使用专用的配置文件,此文件有固定的格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令。
            
系统cron 任务:系统维护作业
    /etc/crontab
用户cron 任务:
    crontab 命令
日志:/var/log/cron
系统cron 任务:/etc/crontab
注释行以 # 开头详情参见 man 5 crontab
系统CRON的配置格式:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/   
    # 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例如:晚上9 点10 分运行echo 命令;   10 21 * * * centos /bin/echo "Howdy!"
 注意:
    (1)每一行定义一个周期性任务:
     *  *  *  *  * :定义周期性时间
     user-name :要运行任务的用户身份
     command to be executed:任务
    (2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量
    (3)执行结果邮件发送MAILTO指定的用户
用户CRON的配置格式:/var/spool/USERNAME
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root       
    # 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    # | | | | |
    # * * * * * command to be executed
    注意:
    (1)每一行定义一个corn任务,共6个字段
    (2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量
    (3)执行结果邮件发送当前用户

计划任务

时间表示法:
(1)  特定值;
     给定时间点有效取值范围内的值
     注意:day of week 和 day of month 一般不混合使用 
     执行结果是或的关系
(2) *
     给定时间点上有效取值范围内的所有值
     表示“每...”     3****:每小时任务,每小时的第三分钟     34**5:每周执行一次,每周5的4点3分     567**:每月执行一次,每月的7号6时5分     78910*:每年执行一次,每年的10月9号8时7分
(3)  离散取值:     #,#,#
     在时间点上使用逗号分隔的多个值      98**3,7:每周三和周日8时9分      18,20**3,7:没周三和周日的8时和20时
(4)  连续取值:-     #-#
     09-18**1-5
             (5)  在指定时间范围上,定义步长:
    /#: # 即为步长
    注意:
    (1)指定的时间点不能被步长整除时,其意义将不复存在
    (2)最小时间单位为分钟,想完成秒级任务,需要额外借助其他几只
       定义没分钟任务:利用脚本实现在没分组之内,循环执行多次
    
    例如:每3小时echo 命令;     0 */3 * * * centos /bin/echo "howdy!"  
    */5****:每五分钟执行一次某任务

时间格式

@reboot Run once after reboot.@yearly 0 0 1 1 *@annually 0 0 1 1 *@monthly 0 0 1 * *@weekly 0 0 * * 0@daily 0 0 * * *@hourly 0 * * * *

计划任务

•  系统的计划任务:/etc/crontab/etc/cron.d/ 配置文件/etc/cron.hourly/  脚本/etc/cron.daily/   脚本/etc/cron.weekly/  脚本/etc/cron.monthly/ 脚本

anacron 系统

运行计算机关机时cron不运行的任务,CentOS6.0 以后版本取消anacron服务,由crond服务管理。
假设计算机没有一直开机
对笔记本电脑、台式机、工作站及其它不一直开机的系统很重要
对偶尔要关机的服务器很有用
配置文件:/etc/anacrontab,负责执行/etc/cron.daily /etc/cron.weekly /etc/cron.monthly中系统任务。         /etc/cron.hourly/ 由/cron.d/0hourly 执行
    •  字段1 :如果在这些时间里没有运行这些任务……
    •  字段2 :在重新引导后等待这么多分钟后运行它
    •  字段3 :任务识别器,在日志文件中标识
    •  字段4 :要执行的任务
    •  当执行任务时,更新/var/spool/anacron/ 文件时间戳

image

管理临时文件

rhel6.0使用/etc/cron.daily/tmpwatch定时清除临时文件。
rhel7.0 使用systemd-tmpfiles-setup 服务实现
配置文件:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
          /usr/lib/tmpfiles.d/tmp.conf
  d /tmp 1777 root root 10d
  d /var/tmp 1777 root root 30d
命令:
systemd-tmpfiles –clean|remove|create configfile

计划任务

用户cron:
crontab命令定义,每个用户都有专用的cron 任务文件:/var/spool/cron/USERNAME
crontab 命令:
crontab [-u user] [-l | -r | -e] [-i]
    -l:  列出所有任务;    -e:  编辑任务;    -r:  移除所有任务;    -i :同-r一同使用,以交互式模式移除指定任务    -u user:仅root可运行,指定用户管理cron任务
控制用户执行计划任务:(白名单、黑名单)
/etc/cron.{allow,deny}
lvasu

at 和crontab

用一次性作业使用 at
重复性作业使用crontab         
Create     at time      crontab -eList       at -l        crontab -lDetails    at -c jobnum    N/A
Remove     at -d jobnum crontab -r
Edit        N/A         crontab -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、每周2, 4, 7 备份/var/log/messages 文件至/logs目录中,文件名形如“messages-yyyymmdd”
   
/etc/crontab0 

0** 2,4,7   tar cf /logs/messages-`date +%Y%m%d` /var/log/messages


2 、每两小时取出当前系统/proc/meminfo 文件中以S或M开头的信息追加至/tmp/meminfo.txt 文件中
     
crontab -e 
   
5 */2 ***   grep '^[SM].*' /proc/meminfo >> /tmp/meminfo.txt

原创文章,作者:lvasu,如若转载,请注明出处:http://www.178linux.com/45909

(0)
上一篇 2016-09-13 11:17
下一篇 2016-09-13 11:17

相关推荐

  • Steps regarding how to proper Write My Essay Cheap with ensures and top notch cheap essay writers for ones pretty have academic responsibilities?

    Learn how to resolve most suitable Write My Essay Cheap with assures and qualified cheap essay writers using your academic jobs? Where to find a Cheap Write My Essay Service Buying…

    Linux干货 2022-12-01
  • 网络N22期-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d" " -f1 | uniq root 2、取出最后登录到当前系统的用户的相关信息。 [roo…

    Linux干货 2016-08-29
  • 配置逻辑卷·设定LVM快照·btrfs文件系统

    _ueditor_page_break_tag_ 配置逻辑卷,设定LVM快照,btrfs文件系统                 逻辑卷管理器( LVM)v允许对卷进行方便操作的抽象层,包括重新设定文…

    Linux干货 2016-09-01
  • 计算机;GPL等开源协议;Linux 哲学思想的炼成;MBR & GPT—fazion in magedu 20.July

    入门Linux的基础知识 fazionlan blog in 178Linux.July 22nd. 第一台计算机 1946第一台计算机ENIAC(electronic numerical integrator and calculator)在美国滨州大学诞生,是美国奥伯丁武器试验场为了满足计算弹道而研制的 冯诺依曼体系结构:1946年数学家提出运算器、控制…

    Linux干货 2016-07-29
  • Linux第二周总结

    1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相关示例演示。 Cp、mv、rm cp命令: copy 单源复制:cp [OPTION]… [-T] SOURCE DEST 如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中; 如果DEST存在: 如果DESST是非目录文件;则覆盖目标文件; 如果DEST是目录文件…

    2017-07-09
  • 如何成为一名软件架构师

    Daniel Mohl是一名专业的软件工程师/架构师,他的兴趣包括理解各种复杂的编程语言、企业应用架构以及如何搭建业务与技术,他通晓F#、C#、CoffeeScript、JavaScript、Erlang、ASP.NET、MVC、WPF、WCF、Sliverlight、SQL Server等技术。有着多年的软件开发经验。 他经常会被一些有潜力和有前途的程序员…

    Linux干货 2016-03-22

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-14 14:28

    图片有些无法正常显示,