1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > linux任务计划不执行时间 Linux任务计划 周期性任务执行

linux任务计划不执行时间 Linux任务计划 周期性任务执行

时间:2021-05-06 18:32:58

相关推荐

linux任务计划不执行时间 Linux任务计划 周期性任务执行

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

内容简要命令:mail,

at, crontab

相信每个人都有使用闹钟的习惯,我们设定闹钟的种类有很多。比如说,只提醒一次、工作日提醒、休息日提醒等。在设定闹钟之后,每天的设定时间都会按时的提醒你去做什么事情,以免自己忘记一些重要的会议等事情。像这样在每天特定的时间安排做一些事情。这样一种事情我们就称之为例行任务计划。

其实在个系统平台上都有类似的例行性任务计划功能,那如何去像设定闹钟一样在Linux系统之上指定例行性任务计划。

我们先来看看任务计划的分类:主要有两种

一次性任务计划:未来的某时间点执行一次某任务:at, batch:只执行一次就结束

周期性任务计划:周期性运行某任务:crontab:每隔一定时间就去做相同的事情

执行结果:会通过邮件发送给用户

~]# netstat

-tnlp

~]# ss -tnl

本地电子邮件服务:

smtp:simple

mail transmission protocol

pop3:Post

Office Procotol

imap4:Internet Mail Access Procotol

mail命令:

mailx - send

and receive Internet mail

MUA:Mail

User Agent, 用户收发邮件的工具程序;

r:回复

d: 删除

mailx

[-s 'SUBJECT']

username[@hostname]

邮件正文的生成:mail查看邮件

(1)

交互式输入;. 单独成行可以表示正文结束;

(2)

通过输入重定向;

~]# mail -s 'fstab file' root < /etc/fstab

(3) 通过管道;

~]# cat /etc/fstab | mail -s 'to you' jklte

at命令:

at是有atd服务提供的,在centos6

上可以使用service atd start来启动服务:在centos7 上要使用sysemctl start

atd.service

at

[OPTION]... TIME

常用选项:

-l:查看作业队列,相当于atq

-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;

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

-c:查看指定作业的具体内容;

-q QUEUE:指明队列;

注意:作业执行结果是以邮件发送给提交作业的用户;

TIME:

HH:MM [YYYY-mm-dd] :如20:01

-11-9

noon,midnight, teatime

tomorrow

now+#

UNIT:minutes, hours, days, OR weeks

at的作业有队列,用单个字母表示,默认都使用a队列;

~]# at now

+3min

at> cat/issue

at> ls /var

at> echo "hello there"

Ctrl+d提交亦可;

问题:显示Can't open /var/run/atd.pid

to signal atd. No atd running?

答:service atd

start(开启atd)

例子:

实例1:三天后的下午 5 点锺执行

/bin/ls

# at 5pm + 3 days

at> /bin/ls

at>

job 7 at -01-08 17:00

实例2:明天17点钟,输出时间到指定文件内

# at 17:20 tomorrow

at> date > /root/doiido.log

at>

Job 8 at -01-06 17:20

batch命令:

batch会让系统自行选择在系统资源较空闲的时间去执行指定的任务;

周期性任务计划:cron,crontab

crontab是由crond服务提供的。

向crond提交作业的方式不同于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;要使用crontab命令;

服务程序:

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

确保crond守护进程(daemon)处于运行状态:

CentOS

7:启动服务

systemctl status

crond.service

Active: active (running) ... ...

CentOS

6:启动服务

service crond

status

... is running.

1、cron任务分为两类:

系统cron任务:主要用于实现系统自身的维护;

手动编辑:/etc/crontab文件

用户cron任务:

命令:crontab命令

(1)系统cron的配置格式:/etc/crontab

注意:

(1)

每一行定义一个周期性任务,共7个字段;

*

* * *

* : 定义周期性时间

user-name :

运行任务的用户身份

command to

be executed:任务

(2)

此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

(3)

执行结果邮件发送给MAILTO指定的用户

(2)用户cron的配置格式:/var/spool/cron/USERNAME

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

# | |

| |

|

# * *

* * *

command to be executed

注意:

(1)

每行定义一个cron任务,共6个字段;

(2)

此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量;

(3)

邮件发送给当前用户;

时间表示法:

(1) 特定值;

给定时间点有效取值范围内的值;

注意:day of

week和day of month一般不同时使用;

(2) *

给定时间点上有效取值范围内的所有值;表“每..”

(3) 离散取值:,

在时间点上使用逗号分隔的多个值;

#,#,#

(4) 连续取值:-

在时间点上使用-连接开头和结束

#-#

(5)

在指定时间点上,定义步长:

/#:#即步长;

注意:

(1)

指定的时间点不能被整除时,其意义将不复存在;

(2)

最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;

定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;

示例:

(1) 3 * * *

*:每小时执行一次;每小时的第3分钟;

(2) 3 4 * *

5:每周执行一次;每周5的4点3分;

(3) 5 6 7 *

*:每月执行一次;每月的7号的6点5分;

(4) 7 8 9 10

*:每年执行一次;每年的10月9号8点7分;

(5) 9 8 * *

3,7:每周三和周日;

(6) 0 8,20 * *

3,7:每周三和周日;8点整和20点整

(7) 0 9-18 * *

1-5:每周一到周五:9点正到18点正

(8) */5 * * *

*:每5分钟执行一次某任务;

(9) */7

crontab命令:

crontab [-u user] [-l | -r | -e]

[-i]

-e:编辑任务;自动打开人物编辑器

* * * * * /bin/echo "hello world"

-l:列出所有任务;

-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;

-i:在使用-r选项移除所有任务时提示用户确认;

-u

user:root用户可为指定用户管理cron任务;

注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件:

(1) COMMAND

> /dev/null

(2) COMMAND

&> /dev/null

注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可;

touch

file-$(date +%f-%H-%M-%S)

思考:某任务在指定的时间因关机未能执行,下次开机会不会自动执行?

不会!.

如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;

anacron:

生产环境中的linux主机,通常都是全天、全年无休止的工作,同样在其之上指定的任务计划也需要每天、每周、固定时间去执行,如果没有什么意外情况(比如断电),那么任务就会按照设定的时间去执行,但是如果在某一周内系统发生了断电情况,在恢复供电期间恰好有一些任务计划要执行,此时任务计划就失效了,当恢复供电后,系统需要等到下一个周期才能继续执行此任务,也就意味着断电期间的任务将失效。

但恰恰在这期间要执行的任务也非常重要,该怎么办?有没有手动去执行的方法吗? 有!那就是

anacron

那么anacron如何知道Linux

系统何时关机的呢?anacron会记录上次anacron执行的时间,anacron会去分析现在的时间与记录上次运行anacron的时间,两者比较后若发现有差异,那就是在某些时刻没有进行计划任务了,此时anacron就会开始运行未进行的crontab任务,所以anacron其实是通过crontab来运行的

anacron是一个程序,而非一个服务,anacron也有自己的配置文件/etc/anacrontaba。

练习:

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

2、每周2、4、7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;

~]# mkidr

logs

~]# crontab

-e

0 1 * *

2,4,7 /bin/cp /var/log/secure /logs/secure-$(date

+%Y-%m-%d-%H-%M)> /dev/null

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

~]# crontab

-e

0 */2 * * *

/bin/ grep "^[S,M]" /proc/meminfo

>>/tmp/meminfo.txt

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。