例行性工作(at,crontab)

目录

单一执行的例行性工作at

语法

选项

时间格式

at的工作文件存放目录

at工作的日志文件

实例

命令总结:

循环执行的例行性工作crond

语法

选项

crontab工作调度对应的系统服务

crontab工作的日志文件

用户定义计划任务的文件所在目录

动态查看

crontab文件格式

文件中的特殊字符

crond服务

查看crontab服务状态

手动启动crontab服务

实例

可唤醒停机期间的工作任务


单一执行的例行性工作at

单一执行的例行性工作:仅处理执行一次就结束了

语法

at [-V] [-q 队列] [-f 文件] [-mldbv] 时间 at -c 作业 [作业...]

选项

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

-l atq的别名,可列出目前系统上面的所有该用户的at调度

-d atrm的别名,可以取消一个在at调度中的工作

-v 使用较明显的时间格式,列出at调度中的任务列表

-c 可以列出后面接的该项工作的实际命令内容(脚本)== cat /var/spool/at/xxxxxxx

-f 从文件中读取作作业

时间格式

HH:MM  在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明

天执行

HH:MM YYYY-MM-DD  强制规定在某年某月的某一天的特殊时刻进行该工作

now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks

at命令 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。

上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

/etc/at.allow,写在该文件的用户可以使用at命令

/etc/at.deny,黑名单

两个文件如果都不存在,只有root能使用

#at工作调度对应的系统服务

[root@localhost ~]# systemctl status atd ---必须写成程序名 或者 ps -ef | grep at

at的工作文件存放目录

[root@localhost ~]# ll  /var/spool/at

创建的at任务目录也能在/var/spool/at 目录下能找到这么一个脚本文件

at工作的日志文件

[root@localhost ~]# ll /var/log/cron

实例

三天后的下午 5 点钟执行/bin/ls

[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at> <EOT>
job 7 at 2024-01-08 17:00

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

[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2024.log
at> <EOT>
job 8 at 2024-01-06 17:20

计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务:

[root@localhost ~]# atq
8       2013-01-06 17:20 a root
7       2013-01-08 17:00 a root

删除已经设置的任务:

[root@localhost ~]# atq
8       2013-01-06 17:20 a root
7       2013-01-08 17:00 a root

[root@localhost ~]# atrm 7
[root@localhost ~]# atq
8       2013-01-06 17:20 a root

显示已经设置的任务内容:

[root@localhost ~]# at -c 8
#!/bin/sh
# atrun uid=0 gid=0
# mail     root 0
umask 22此处省略n个字符
date >/root/2013.log

#定义三分钟之后显示hello

[root@server ~]# at now + 3 minutes

-l atq的别名,可列出目前系统上面的所有该用户的at调度,查看系统任务

命令总结:

循环执行的例行性工作crond

循环执行的例行性工作:每隔一定的周期就需要执行一次

语法

crontab(选项)(参数)

选项

-e:编辑该用户的计时器设置;

-l:列出该用户的计时器设置;

-r:删除该用户的计时器设置;

-u<用户名称>:指定要设定计时器的用户名称。

crontab的工作过程

/etc/cron.allow,写在该文件的人可以使用at命令

/etc/cron.deny,黑名单

两个文件如果都不存在,只有root能使用此处提一下PATH与windows上的也是原理在path里面计算机会自动扫描这里的文件,比如说一些可执行文件touch 命令的就放在这个目录下所以可以不使用绝对路径直接使用他

crontab工作调度对应的系统服务

[root@localhost ~]# systemctl status crond

crontab工作的日志文件

[root@localhost ~]# ll /var/log/cron

用户定义计划任务的文件所在目录

[root@localhost ~]# ll /var/spool/cron/

动态查看

[root@localhost ~]# tail -f /var/log/cron

补充说明

crontab命令 被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

参数

crontab文件:指定包含待执行任务的crontab文件。

知识扩展

Linux下的任务调度分为两类: 系统任务调度 和 用户任务调度 。

系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

/etc/crontab文件包括下面几行:

#run-parts ---此处的功能为将脚本每个小时、每天、每周、每个月运行一次

SHELL=/bin/bash
PATH=
/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
""HOME=/

# run-parts

5 1* * * * root run-parts /etc/cron.hourly
2 4 7 * * * root run-parts /etc/cron.daily
2 2 4* * 0root run-parts /etc/cron.weekly
4 2 4 1* * root run-parts /etc/cron.monthly

前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

用户任务调度: 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:

/etc/cron.deny     该文件中所列用户不允许使用crontab命令
/etc/cron.allow    该文件中所列用户允许使用crontab命令
/var/spool/cron/所有用户crontab文件存放的目录,以用户名命名

 

crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,

crontab文件格式

Minute hour day month week   command(命令)     顺序:分 时 日 月 周

其中:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

文件中的特殊字符

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

注:%在crontab里面有特殊含义,如果有命令里面需要使用%,需要使用\转义。

crond服务

/sbin/service crond start    # 启动服务

/sbin/service crond stop     # 关闭服务

/sbin/service crond restart  # 重启服务

/sbin/service crond reload   # 重新载入配置

查看crontab服务状态:

service crond status

手动启动crontab服务:

service crond start

实例

每1分钟执行一次command

* * * *  command

每小时的第3和第15分钟执行

3,15 * * * * command

在上午8点到11点的第3和第15分钟执行

3,158-11* * * command

每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */* * command

每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * command

每晚的21:30重启smb 

30 21 * * * /etc/init.d/smb restart

每月1、10、22日的4 : 45重启smb 

45 41,10,22 * * /etc/init.d/smb restart

每周六、周日的1:10重启smb

10 * * 6,/etc/init.d/smb restart

每天18 : 00至23 : 00之间每隔30分钟重启smb 

0,30 18-23 * * *  /etc/init.d/smb restart

每星期六的晚上11:00 pm重启smb 

0 23 * * 6/etc/init.d/smb restart

每一小时重启smb 

* */1 * * * /etc/init.d/smb restart

晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

每月的4号与每周一到周三的11点重启smb 

0 114* mon-wed /etc/init.d/smb restart

一月一号的4点重启smb

0 411 * /etc/init.d/smb restart

每小时执行/etc/cron.hourly目录内的脚本

0 1 * * * *  root run-parts /etc/cron.hourly

每次执行任务时都会将日志文件存到 /var/log/cron 下面

动态查看crontab的任务情况

tail -f /var/log/cron

可唤醒停机期间的工作任务

anacron 可以处理关机状态时未执行的计划任务,anacron不能指定何时执行某项任务,而是以天为单位或是在开机后立刻进入anacron的操作(`/etc/anacrontab`)。它会去检测停机期间应该进行但是并没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍妍的宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值