系统延时及定时机制

本文详细介绍了Linux下的at和crond服务,以及它们用于系统延时任务和定时任务的管理。讲解了at命令的使用,包括启动、停止服务、任务添加、显示与删除,以及权限管理。此外,还探讨了crontab命令,说明了系统任务调度与用户任务调度的区别,并展示了crontab的设置与编辑方法。最后提到了crontab的黑白名单管理以及定时任务的临时文件管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、at命令

1.at服务

  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
  service atd start    //启动服务
  service atd  stop     //关闭服务
  service atd restart  //重启服务
  service atd reload   //重新载入配置
  service atd status   //查看服务状态 

2.at在配置文件:

at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。

3.参数详解

at [-V] [-q x] [-f file] [-mldbv] time
at -c job ...
atq [-V] [-q x]
atrm [-V] job ...

-V : 印出版本编号 

-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个 

-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者 

-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 网络应用


-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) 
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d) 
-v : 列出所有已经完成但尚未删除的指定



1)at命令添加延时任务
    时间
    延迟的时间
    ctrl+d发起任务

示例:

a)直接加时间

[root@localhost dir]# at 22:24
at> date
at> <EOT>                                      #ctrl+d发起任务
job 9 at Thu Apr  6 22:24:00 2017
[root@localhost dir]# mail               #at命令也可以向发起任务的用户发送邮件,当命令是有输出的时候

 5 root                  Thu Apr  6 22:24  14/524   "Output from your job "

b)加延迟的时间
[root@localhost dir]# at now+1min
at> date
at> <EOT>
job 10 at Thu Apr  6 22:26:00 2017
You have mail in /var/spool/mail/root
[root@localhost dir]# mail
6 root                  Thu Apr  6 22:26  15/534   "Output from your job "

2)at命令显示当前还未执行的任务

at -l :列出到当前还未执行的任务

示例:

[root@localhost dir]# at -l
11    Thu Apr  6 22:30:00 2017 a root

3)删除延时任务

atrm 任务号              #删除一个任务

示例:

[root@localhost dir]# at -l
13    Thu Apr  6 22:31:00 2017 a root
[root@localhost dir]# atrm 13
[root@localhost dir]# at -l
[root@localhost dir]#


4)at命令的黑名单

/etc/at.deny

[root@localhost dir]# vim /etc/at.deny
[root@localhost dir]# cat /etc/at.deny
student

[root@localhost dir]# su - student
Last login: Thu Apr  6 09:44:25 EDT 2017 on pts/0
[student@localhost ~]$ at now+1min
You do not have permission to use at.

5)at命令的白名单

/etc/at/allow默认是没有这个文件,只要他出现,黑名单就失效了,所有人都是黑名单
[root@localhost dir]# vim /etc/at.allow

[root@localhost dir]# cat /etc/at.allow
student
[root@localhost dir]# su - student
Last login: Thu Apr  6 10:52:11 EDT 2017 on pts/0
[student@localhost ~]$ at now+1min
at> date
at> <EOT>
job 6 at Thu Apr  6 10:56:00 2017



at命令示例:

        时 间              例子                               说明
  -----------------------------------------------------------------------
  Minute     at now + 5 minutes          任务在5分钟后运行
  Hour        at now + 1 hour               任务在1小时后运行
  Days        at now + 3 days              任务在3天后运行
  Weeks     at now + 2 weeks            任务在两周后运行
  Fixed       at midnight                       任务在午夜运行
  Fixed       at 10:30pm                       任务在晚上10点30分

  Fixed       at 23:59 12/31/2018   任务在2018年12月31号23点59分  

二、crond服务及crontab命令


1.crond服务

crond用来做周期性运行的例行任务,执行这项服务的命令就是crontab命令了。

2.crond与crontab的关系

crond是一个守护进程,它每分钟wake up一次,按照crontab里定义的形式来执行任务
crond是工具,是linux服务项
我们可以查看crond服务状态:
#/sbin/service crond status
也可以启动、停止、重启crond服务:
#/sbin/service crond start
#/sbin/service crond stop
#/sbin/service crond restart
cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务,
你可以编辑/etc/crontab来修改你要的服务

crontab是在unix/linux系统上定时执行某个任务的程序

打个比方,就像只有我买了adsl这项服务,我才可以上网,crond就是服务,crontab就是上网操作



3.linux下的任务调度又分为系统任务调度和用户任务调度两个大类。

  • 系统任务调度

  系统周期性所要执行的工作,比如写缓存数据到硬盘,日志的定期清理一类的,在/etc目录下有一个

  crontab的文件,这个就是系统任务调度的配置文件了。来看一下这个配置文件的说明


[root@localhost Desktop]# cat /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)  -》表示分钟,可以是从0到59之间的任何整数。
 |  .------------- hour (0 - 23)  -》表示小时,可以是从0到23之间的任何整数。
 |  |  .---------- day of month (1 - 31)  -》表示日期,可以是从1到31之间的任何整数。
 |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...  -》表示月份,可以是
                    从1到12之间的任何整数。
 |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR 
                   sun,mon,tue,wed,thu,fri,sat  -》表示星期几,从0到7的任何整数,
                   0或7代表星期日。
 |  |  |  |  |*  *  *  *  * user-name  command to be executedi  -》要执行的命令,
                   可以是系统命令,也可以是自己编写的脚本文件。

我们看到,前三行说明了要运行的shell的一些参数,第一行SHELL=/bin/bash代表了要运行哪个shell,linux下默认的就是最常用的bash;

第二行代表要运行的shell脚本或系统命令等地路径;第三行的mailto则代表要将任务的执行信息发送给谁,如果是空则不发送信息,本例中

则是发送给root用户。最后一行的描述请看上图中的描述,或参考下图


注意,在以上各个字段中,还可以使用以下特殊字符:

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

  该任务调度是指站在了人的角度去执行的事务,如定期的用户数据备份、网络爬虫的定期执行、工作任务的定期邮件提醒等等,用户

  都可以通过crontab任务来执行计划任务。所有用户定义的crontab文件都保存在目录/var/spool/cron中,文件名与用户名一致。

3.crontab用法

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务

比如说root查看自己的cron设置:crontab -u root -l

再例如,root想删除fred的cron设置:crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt 


4.怎样非交互式的建立定时任务:
在/etc/cron.d下写文件,文件名可以任意,但是文件内容有要求
时间 用户 任务

* * * * * root touch /dir/file{1..2}


5.crontab黑白名单

黑名单:/etc/cron.deny
白名单:/etc/cron.allow

crontab的黑白名单是用来规定谁不能执行crontab命令,与/etc/cron.d/下的文件和/etc/crontab没有关系,即使student在黑名单中,若是/etc/cron.d下的文件和/etc/crontab有student的任务,依然可以执行


[root@localhost ~]# su - student
Last login: Thu Apr  6 10:55:26 EDT 2017 on pts/0
[student@localhost ~]$ crontab -e
You (student) are not allowed to use this program (crontab)
See crontab(1) for more information
[root@localhost ~]# vim /etc/cron.allow
[root@localhost ~]# su - student
Last login: Thu Apr  6 12:09:46 EDT 2017 on pts/0
[student@localhost ~]$ crontab -e
crontab: no changes made to crontab


5.crontab注意事项

crontab 注意事项
• 属于系统的任务通常保存在 /etc/crontab 文件中而不是使用 crontab -e 编辑保存在个人文件中。更好的做法是用文本编辑器创建 crontab 文件并保存到 /etc/cron.d 中 ( 避免更新系统软件包 cronie 时出现问题 ) 。

/etc/cron.d/crontab 文件在日期说明后另加一个字段 , 表示将运行作业的用户
• 对于需要每天、每周或每月运行一次的脚本 , 可以直接将其设置为可执行文件 , 并保存在 /etc/cron.{daily,weekly,monthly} 中相应目录下。这些任务由/etc/anacrontab 配置的系统 anacron 服务运行 anacron是 cron 的集成组件 , 用于更好地管理作业 , 并确保在作业因计算机关闭而未运行的情况下 , 在系统引导后运行作业



定时任务管理临时文件:

/usr/lib/tmpfiles.d/:标实服务的临时文件存放位置

linux如何保证系统的清洁,并且还要保证正在执行的临时文件不能被清理掉?

设置文件存在的时间长度,超过时间长度就可删除。

在/usr/lib/tmpfiles.d/建立一个文件 里面写

d /mnt/westos 1777 root root 5s  

d表示目录

实验:

systemd-tmpfiles --create /usr/lib/tmpfiles.d/*
在/mnt/westos创建一个文件等一会儿再创建一个,执行
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*                          ##会删除先创建的文件file


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值