Linux作业管理,并行运行,任务计划(at任务和cron任务)

本文主要介绍:1、Linux作业管理 2、并行运行 3、任务计划(at 一次性任务和 cron 周期性任务)

本文涉及到的命令主要有:

1、作业管理:   jobs、  ctrl+Z(按键)、 fg 、 bg、 kill、 killall、 nohup、 screen

2、任务计划:   at、 crontab、  sleep

一、Linux作业管理

  •     Linux的作业控制

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

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

  •   让作业运行于后台

运行中的作业: Ctrl+z (会自动转为休眠模式)

尚未启动的作业: COMMAND &

  •   查看当前终端所有作业:jobs

查看到的后台作业中,显示有+ –的,如果用 fg 命令后面不指定作业号时,+为默认调用的第一个作业,为第二个作业,越早送到后台的作业,默认越晚被调回

  •   作业控制:

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

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

kill [%JOB_NUM]     终止指定的作业(这里作业号前面一定要加%,否则会与 kill 的命令冲突)

killall -19 COMMAND  将后台作业转入休眠模式

killall -18 COMMAND  将后台作业转入运行模式

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

nohup COMMAND  [&>/dev/null]  &   (如果不加中括号里的重定向,则执行命令后的标准输出及错误会追加至nohup.out)

screen  ;   COMMAND      (开启分屏会话,然后执行任务,screen -r 恢复回话)

二、并行运行

同时运行多个进程,提高效率

  •  方法1 :编辑脚本,将要执行的任务写入脚本

   vi all.sh

f1.sh &

f2.sh &

f3.sh &

  •  方法2  :小括号

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

  •  方法3  : 大括号

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

三、任务计划

定时执行一次任务:at

周期性运行任务:cron

(共同点:没有被重定向的输出和错误以邮件通知给相关用户;根用户能够修改其它用户的作业)

  • 共同点:运行结果的标准输出和错误以邮件通知给相关用户

COMMAND > /dev/null   则执行正确之后,不发送执行结果;但执行错误还是会发送邮件

COMMAND &> /dev/null   则执行结果无论对错都不发送邮件

at一次性任务

  • 包:at

        需要启动atd服务,才能实现at任务。

centos6启用:service atd start

centos7启用:systemctl start atd

  •  at命令:at [option] TIME

 常用选项:

-V    显示版本信息

-l      列出指定队列中等待运行的作业;相当于atq at队列存放在/var/spool/at/目录中

-d #    删除指定的作业;相当于atrm

-c #     查看具体作业任务

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

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

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

HH:MM [YYYY-mm-dd]  (如14:00 [2018-05-06] )

noon(中午12点), midnight(晚上12点), teatime(下午4点)

tomorrow

now+#{minutes,hours,days, OR weeks}   (如 now + 3 minutes)

  • 执行方式:

  • at任务的用户控制功能

/etc/at.{allow,deny}控制用户是否能执行at任务

白名单:/etc/at.allow 默认不存在;如果建立白名单,只有该文件中的用户才能执行at命令

黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行

如果两个文件中有同一个用户,则白名单优先;

如果两个文件都不存在,只有 root 可以执行 at 命令。

cron周期性任务

  • 相关的程序包:

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

cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务。(家用电脑由于关机会有这方面问题,生产中服务器不关机一般不会影响周期任务执行,了解即可)

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

  • 确保crond守护处于运行状态:

CentOS 7:   systemctl status crond

CentOS 6:   service crond status

  • 1)系统cron任务:系统维护作业     /etc/crontab
  • 2)用户cron任务:crontab命令

日志:/var/log/cron  (追踪周期任务,误删任务时可根据日志找回)

  • 对于cron任务来讲,%有特殊用途,如果在命令中要使用%,则需要转义,或放置于单引号,或写入脚本中然后调用此脚本。

1)系统cron任务:系统维护作业     /etc/crontab

  • 直接编辑 /etc/crontab 文件 ,格式如下图所示:

QQ截图20180506195404

例:30 21 * * *   root   /bin/echo “nihao”    每天晚上9点30分执行echo命令

  • 时间表示法:
  1.  特定值:给定时间点有效取值范围内的值
  2. *    给定时间点上有效取值范围内的所有值,表示“每…”    (如:*  02  *  *  *  表示每天2点每分钟执行任务)
  3. #,#,#   离散取值    (如:0  2  1,3,5  *  *   表示每个月1号3号5号的2点00分执行任务)
  4. #-#    连续取值    (如:0  2  1-5  *  *   表示每个月1号到5号的2点00分执行任务)
  5. /#   在指定时间范围上,定义步长  (如:0  */3 *  *  *   表示每天每3个小时执行任务)
  • 特定的时间格式:

                @reboot     表示每次重启之后运行一次
@yearly     表示每年运行一次,功能相当于 0 0 1 1 *
@annually   表示每年运行一次,功能相当于0 0 1 1 *
@monthly    表示每月运行一次,功能相当于0 0 1 * *
@weekly     表示每周运行一次,功能相当于0 0 * * 0
@daily      表示每天运行一次,功能相当于0 0 * * *
@hourly     表示每小时运行一次,功能相当于0 * * * *

  • 在秒级别运行任务:结合 sleep 命令

sleep NUMBER[SUFFIX]…
SUFFIX:
s: 秒, 默认
m: 分
h: 小时
d: 天

如:* * * * * wall 1 ; sleep 20; wall 2 ; sleep 20 ; wall 3 表示每个广播任务之间间隔20秒。

  • 系统的计划任务:

/etc/crontab

/etc/cron.d/ 配置文件

/etc/cron.hourly/ 脚本

/etc/cron.daily/ 脚本

/etc/cron.weekly/ 脚本

/etc/cron.monthly/ 脚本

  • 管理临时文件:

CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件

CentOS7使用systemd-tmpfiles-setup服务实现

2)用户cron任务:crontab命令

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}   (性质同 at 任务的黑白名单,如果一个用户之前不在黑名单,后来加入黑名单,那他之前所创建的周期任务依然会定期执行)

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97658

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code