作业管理以及计划任务

作业管理

我们在ping一台主机的时候,返回的结果一直占据着终端无法释放。这时我们需要打开另一个终端来继续完成别的任务。还有我们晚上在执行脚本时,我们希望它能自动在后台运行,等第二天回来直接看结果就好。想实现这样的功能,就得依靠作业管理功能。

作业控制:

  • 前端作业:通过终端启动,且启动后一直占据着终端
  • 后端作业:可通过终端启动,但启动后即转入后台运行。

让作业运行于后台:

  • 运行中的作业:Ctrl+z
  • 尚未启动的作业:COMMAND &
    上述两种情况虽然在后端运行,但是其还是与终端有关,终端退出之后,作业也就自动关闭,如果想剥离终端运行,可以使用下面两个命令
  • nohup COMMAND &> /dev/null &
  • screen;COMMAND

查看当前终端的所有作业:jobs
作业控制:

  • fg [[%]JOB_NUM]:把指定的作业送到前台
  • bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
  • kill [[%]JOB_NUM]:终止指定的作业
示例:
[root@centos7 ~]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=46 time=18.6 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=46 time=17.2 ms
^Z
[1]+  已停止               ping baidu.com
运行中使用Ctrl+z效果

[root@centos7 ~]# ping baidu.com &>/dev/null &
[1] 8098
&后台运行效果

[root@centos7 ~]# jobs
[1]-  已停止               ping baidu.com &>/dev/null
[2]+  已停止               ping sohu.com


[root@centos7 ~]# fg 2
ping sohu.com
64 bytes from 123.125.116.28 (123.125.116.28): icmp_seq=4 ttl=49 time=17.4 ms
将第二个任务放到前端执行


[root@centos7 ~]# nohup ping baidu.com
nohup: 忽略输入并把输出追加到"nohup.out"
nohup会把输出的信息追加到nohup.out文本里,如果不停止,会一直往文本里写东西

任务计划

在特定的时间或者每次同样的时间去执行任务,就是任务计划。

  • 在未来的某个时间点干一件事情。
    • at
    • batch:系统自行选择空闲时间去执行此处指定的任务
  • 周期性执行某任务
    • cron

at

at命令:at [option] TIME
常用选项:
-V:列出版本信息
-l:列出指定队列中的等待运行的作业,相当于atq
-d:删除指定的作业;相当于atrm
-c:查看具体作业
-f /path/to/somefile :从指定的文件中读取任务
-m:当任务被完成之后,给用户发邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误都以邮件方式发送给用户

指定什么时间执行任务
HH:MM [YYYY-mm-dd]  具体时间  
noon, midnight, teatime(4pm) 
tomorrow 明天
now+\#{minutes,hours,days, OR weeks}  从现在开始往后

示例:
[root@localhost ~]# at now+3min
at> rm -rf /data/*
at> <EOT>
job 4 at Wed Nov 20 02:36:00 2019

3分钟后执行删除data下数据的任务


at时间格式
HH:MM   如02:00
在今日的HH:MM执行任务,如果该时间已过,将第二天执行
HH:MM  YYYY-MM-DD 如02:00 2019-11-21
规定在某年某月末日的某一天的某个时刻执行该任务


at任务执行方式
1)交互式,Ctrl+d提交  2)输入重定向 3)at -f文件
 
 示例:
 [root@localhost ~]# at now+1min -f f1.sh
job 5 at Wed Nov 20 02:46:00 2019
1分钟后执行f1脚本

注意:
at命令可以利用配置文件来控制用户是否能执行at任务

/etc/at.{allow,deny}控制用户是否能执行at任务
	白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
	黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
	如果两个文件都不存在,只有 root 可以执行 at 命令   
	使用交互式命令时,ctrl+d保存任务


cron命令

计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。

在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来。所以我们要确保crond服务启动。

/etc/crontab的文件内容

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

		总共有五颗星,分别表示:分,小时,天,月,星期    
	    user-name  :运行任务的用户身份
	    command to be executed:要执行的任务
时间表示法:
1、特定值:
	给定时间点有效取值范围内的值
2、*
	给定时间点上有效取值范围内的所有值,表示“每”
3、#,# #
	指定时间的离散值,在特定的时间点上使用“,”分隔开,
4、连续取值:-
	在时间点上使用-连接开头和结束
5、在指定的时间点上,定义步长
	/# :#即步长
	注意:
			指定的时间点不能被步长整除时,其意义将不复存在
			最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制
			定义成每分钟任务,利用脚本实现在每分钟之内。循环执行n次

示例:
1 2 * * *  表示每天的2点零1分
1 * * * * 表示在每小时的第1分钟
3 4 * * 5 表示每周五的4点3分
5 6 7 * *   每月的7号6点5分
0 9-18 * * 1-5:周一到周五 9点到18点每小时执行一次 

** crontab命令**

  crontab [-u user] [-l | -r | -e] [-i] 
                -e:编辑任务;
                -l:列出所有任务
                 -r:移除所有任务;即删除/var/spool/cron/USERNAME文件
                 -i:在使用-r选项时移除所有任务,提示用户确认
                 -u USERNAME:root用户可为指定用户管理cron任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值