Linux系统之延时及定时机制

本文详细介绍了Linux系统中的延时任务和定时任务管理。通过at命令实现延时任务,如在指定时间执行date命令,并展示了如何查看和管理at任务的输出邮件。同时,文章讲解了crontab的定时任务表达式,以及如何设置和管理定时服务。最后,讨论了systemd-tmpfiles如何管理系统的临时文件,包括文件的创建和删除策略。

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

系统延时任务——at

在Linux系统中,我们的延时任务同at命令来执行,此命令有两种表示方法:
1. at   时间:在该时间点执行at’后的命令
2. a t now+数字min:在数字min后执行at后的命令
我们在输入命令结束后使用ctrl+d发起任务

名称方法
查看任务列表at -l
查看任务内容at -c 任务号
取消任务执行at -r 任务号
##设定在22:32执行在/mnt/目录下建立file{1..5},并在当前目录下建立file1,在其中写入 hellow word
[root@foundation70 ~]# at 22:32
at> touch /mnt/file{1..5}
at> echo hellow word > file1
at> <EOT>
job 16 at Thu Jul 25 22:32:00 2019
##查看任务列表
[root@foundation70 ~]# at -l
16	Thu Jul 25 22:32:00 2019 a root
##查看任务详细内容
[root@foundation70 ~]# at -c 16
#!/bin/sh
# atrun uid=0 gid=0
# mail kiosk 0
umask 22
XDG_VTNR=1; export XDG_VTNR
XDG_SESSION_ID=1; export XDG_SESSION_ID
HOSTNAME=foundation70.ilt.example.com; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
QTDIR=/usr/lib64/qt-3.3; export QTDIR
QTINC=/usr/lib64/qt-3.3/include; export QTINC
QT_GRAPHICSSYSTEM_CHECKED=1; export QT_GRAPHICSSYSTEM_CHECKED
USER=root; export USER
LS_COLORS=rs=0:di=38\;5\;27:ln=38\;5\;51:mh=44\;38\;5\;15:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=05\;48\;5\;232\;38\;5\;15:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;34:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.Z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\;13:\*.mov=38\;5\;13:\*.mpg=38\;5\;13:\*.mpeg=38\;5\;13:\*.m2v=38\;5\;13:\*.mkv=38\;5\;13:\*.webm=38\;5\;13:\*.ogm=38\;5\;13:\*.mp4=38\;5\;13:\*.m4v=38\;5\;13:\*.mp4v=38\;5\;13:\*.vob=38\;5\;13:\*.qt=38\;5\;13:\*.nuv=38\;5\;13:\*.wmv=38\;5\;13:\*.asf=38\;5\;13:\*.rm=38\;5\;13:\*.rmvb=38\;5\;13:\*.flc=38\;5\;13:\*.avi=38\;5\;13:\*.fli=38\;5\;13:\*.flv=38\;5\;13:\*.gl=38\;5\;13:\*.dl=38\;5\;13:\*.xcf=38\;5\;13:\*.xwd=38\;5\;13:\*.yuv=38\;5\;13:\*.cgm=38\;5\;13:\*.emf=38\;5\;13:\*.axv=38\;5\;13:\*.anx=38\;5\;13:\*.ogv=38\;5\;13:\*.ogx=38\;5\;13:\*.aac=38\;5\;45:\*.au=38\;5\;45:\*.flac=38\;5\;45:\*.mid=38\;5\;45:\*.midi=38\;5\;45:\*.mka=38\;5\;45:\*.mp3=38\;5\;45:\*.mpc=38\;5\;45:\*.ogg=38\;5\;45:\*.ra=38\;5\;45:\*.wav=38\;5\;45:\*.axa=38\;5\;45:\*.oga=38\;5\;45:\*.spx=38\;5\;45:\*.xspf=38\;5\;45:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
KDEDIRS=/usr; export KDEDIRS
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
XDG_SEAT=seat0; export XDG_SEAT
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
QTLIB=/usr/lib64/qt-3.3/lib; export QTLIB
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
QT_PLUGIN_PATH=/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins; export QT_PLUGIN_PATH
XAUTHORITY=/root/.xauthQD9sTs; export XAUTHORITY
OLDPWD=/mnt; export OLDPWD
cd /root || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER499555d8'
touch /mnt/file{1..5}
echo hellow word > file1

marcinDELIMITER499555d8
##在两分钟后删除/mnt/中的所有文件
[root@foundation70 ~]# at now+2min
at> rm -rf /mnt/*
at> <EOT>
job 17 at Thu Jul 25 22:33:00 2019
##查看任务内容
[root@foundation70 ~]# at -l
16	Thu Jul 25 22:32:00 2019 a root
17	Thu Jul 25 22:33:00 2019 a root
##当前时间
[root@foundation70 ~]# date
Thu Jul 25 22:31:30 CST 2019
##并没有file出现,时间未到,任务未执行
[root@foundation70 ~]# ls /mnt/
##当前时间,时间到了,任务执行
[root@foundation70 ~]# date
Thu Jul 25 22:32:05 CST 2019
[root@foundation70 ~]# ls /mnt/
file1  file2  file3  file4  file5
##查看第二条命令;当前目录下file1中是否写入hellow word
[root@foundation70 ~]# cat file1
hellow word
##延时3分钟的任务未执行
[root@foundation70 ~]# at -l
17	Thu Jul 25 22:33:00 2019 a root
[root@foundation70 ~]# date
Thu Jul 25 22:32:59 CST 2019
[root@foundation70 ~]# date
Thu Jul 25 22:33:10 CST 2019
##三分钟后任务成功执行
[root@foundation70 ~]# ls /mnt/

在这里插入图片描述
注意

当任务有输出时,输出会以邮件的形式发送给at任务的执行者
可以使用mail -u xx来查看xx用户的邮件信息;
使用1来查看该用户的第一封邮件;
使用q退出该命令;
清空xx用户邮箱可以用> /var/spool/mail/xx

##在1分钟后执行date命令,date命令时有输出的命令,显示当前时间
[root@foundation70 ~]# at now+1min
at> date
at>
job 18 at Thu Jul 25 22:57:00 2019
[root@foundation70 ~]# mail -u root
Heirloom Mail version 12.5 7/5/10. Type ? for help.
“/var/mail/root”: 7 messages 7 new
N 1 user@localhost.ilt.e Sat Jun 29 08:30 1201/95139 “[abrt] nautilus: na”
N 2 user@localhost.ilt.e Sat Jul 20 04:49 1201/95139 “[abrt] nautilus: na”
N 3 user@localhost.ilt.e Mon Jul 22 05:03 268/15104 “[abrt] : WARNING: at”
N 4 user@localhost.ilt.e Mon Jul 22 05:04 2061/143023 “[abrt] kernel: WAR”
N 5 user@localhost.ilt.e Thu Jul 25 05:58 1201/95139 “[abrt] nautilus: na”
N 6 user@localhost.ilt.e Thu Jul 25 19:22 1201/95139 “[abrt] nautilus: na”
N 7 user@localhost.ilt.e Thu Jul 25 22:34 1201/95139 “[abrt] nautilus: na”
##查看第一封邮件
& 1
Message 1:
From user@localhost.ilt.example.com Sat Jun 29 08:30:51 2019
Return-Path: user@localhost.ilt.example.com
X-Original-To: root@localhost
Delivered-To: root@localhost.ilt.example.com
##信件内容显示时间
Date: Sat, 29 Jun 2019 08:30:51 +0800
From: user@localhost.ilt.example.com
To: root@localhost.ilt.example.com
Subject: [abrt] nautilus: nautilus killed by SIGSEGV
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
Status: R

reason: nautilus killed by SIGSEGV
cmdline: nautilus --no-default-window --force-desktop
executable: /usr/bin/nautilus
package: nautilus-3.14.3-12.el7
component: nautilus
pid: 1971
pwd: /home/kiosk
hostname: foundation70.ilt.example.com
count: 1
abrt_version: 2.1.11
##退出
& q
Held 7 messages in /var/mail/root
You have mail in /var/spool/mail/root

在这里插入图片描述

##at命令的黑白名单

/etc/at.deny这个文件系统中默认存在,出现在该文件中的用户不能使用at命令;
/etc/at.allow这个文件需要自己添加。当该文件出现后,只有该文件中的用户才可以使用at命令,并且此时at.deny中的文件内容会失效,系统不会读取at.deny文件
##创建两个用户进行at黑白名单的实验
[root@foundation70 ~]# useradd cai
[root@foundation70 ~]# useradd student
##切换到cai用户,执行at命令,可以执行
[root@foundation70 ~]# su - cai
[cai@foundation70 ~]$ at 5:55
at> ^C[cai@foundation70 ~]$
[cai@foundation70 ~]$ exit
logout
##切换到student用户,执行at命令,可以执行
[root@foundation70 ~]# su - student
[student@foundation70 ~]$ at 5:55
at> ^C[student@foundation70 ~]$
[student@foundation70 ~]$ exit
logout
##在黑名单中添加student用户
[root@foundation70 ~]# vim /etc/at.deny
[root@foundation70 ~]# cat /etc/at.deny
student
##切换到student用户,at命令不能执行
[root@foundation70 ~]# su - student
Last login: Thu Jul 25 23:09:59 CST 2019 on pts/1
[student@foundation70 ~]$ at 5:55
You do not have permission to use at.
[student@foundation70 ~]$ exit
logout
##切换到cai用户,at命令可以执行,因为cai用户没在黑名单中
[root@foundation70 ~]# su - cai
Last login: Thu Jul 25 23:09:29 CST 2019 on pts/1
[cai@foundation70 ~]$ at 5:55
at> ^C[cai@foundation70 ~]$
[cai@foundation70 ~]$ exit
##建立白名单并在其中设置student’用户
[root@foundation70 ~]# vim /etc/at.allow
[root@foundation70 ~]# cat /etc/at.allow
student
[root@foundation70 ~]# cat /etc/at.deny
student
##切换到student用户,student用户可以使用at命令,且不受黑名单的影响
[root@foundation70 ~]# su - student
Last login: Thu Jul 25 23:11:07 CST 2019 on pts/1
[student@foundation70 ~]$ at 5:55
at> ^C[student@foundation70 ~]$
[student@foundation70 ~]$ exit
logout
##切换到cai用户,其不能使用at命令
[root@foundation70 ~]# su - cai
Last login: Thu Jul 25 23:11:21 CST 2019 on pts/1
[cai@foundation70 ~]$ at 5:55
You do not have permission to use at.

在这里插入图片描述
超级用户不受权力的限制,可以自行更改

系统定时任务——crontab

##crontab的表示方法

具体由五个*构成。从第一个到第五个的含义依次为:分钟 小时 天 月 周
*  *   *   *   *          每分钟执行一次命令
*/2  *   *   *   *          每两分钟执行一次命令
*/2  09-17   *   *   *          早上七点到晚上五点每两分钟执行一次命令
*/2  */2   *   *   *          每隔两小时每两分钟执行一次命令
*/2  09-17   3,5  1   5          一月;3号到5号;每周星期五这三个时间段,早上七点到晚上五点每两分钟执行一次命令
*/2  09-17   *   *   5          每周周五早上七点到晚上五点每两分钟执行一次命令

名称方法
编辑定时任务crontab -e
显示存在的定时任务crontab -l
删除所有定时任务crontab -r
删除xx用户建立的定时任务crontab -r -u xx

##只有超级用户可以-u指定用户,普通用户只能对自己的任务进行操作

在这里插入图片描述
##系统控制crontab的服务——crond

service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置

##文件方式设定定时服务

在/etc/cron.d/目录下,建立文件,在其中写入对应内容,即可设定定时服务
*  *   *   *   *           username                action 
例如:
*  *   *   *   *           root                   rm -rf /mnt/ *  

/etc/cron.d/xxx ##此目录中任务不能用命令查看,只有超级用户可以写入
crontab的黑白名单

/etc/cron.deny这个文件系统中默认存在,出现在该文件中的用户不能使用cron命令;
/etc/cron.allow这个文件需要自己添加。当该文件出现后,只有该文件中的用户才可以使用cron命令,并且此时cron.deny中的文件内容会失效,系统不会读取cron.deny文件

crontab和at的黑白名单几乎一样,出可参数不一样外,理解方式基本相同—————但是这两个名单都不会影响/etc/cron.d目录中定时任务的发生和执行

系统中临时文件的管理方式—— systemd-tmpfiles

  系统在使用的过程中,会产生许多的临时文件,这些临时文件被存放在/tmp中。但是,我们可以得知/tmp文件不会被存满,这是因为每隔一段时间后,系统设置有自动删除功能。
  设定文件在/usr/lib/tmpfiles.d/目录里面,文件名可以自己设置,但必须以.conf结尾。
格式为:
文件类型 文件名称 权限 所属人 所属组 临时服务时间
在这里插入图片描述
表示只有存在时间12s以上的在/tmp里面的文件才可以被执行

我们先使用watch命令监控/mnt/cai这个目录,查看产生的文件的走向
[kiosk@foundation70 ~]$ watch -n 1 ‘ls -Rl /mnt/cai’
然后打开一个新的终端
##启动系统时,systemd执行命令
[root@foundation70 tmpfiles.d]# systemd-tmpfiles --creat /usr/lib/tmpfiles.d/cai.conf
##在/mnt/cai的目录中生成filr{1…6}个文件
[root@foundation70 tmpfiles.d]# touch /mnt/cai/filr{1…6}
##删除临时文件的任务,但是文件未被删除,因为设定时间为12s后才可以被删除
[root@foundation70 tmpfiles.d]# systemd-tmpfiles --clean /usr/lib/tmpfiles.d/cai.conf
在这里插入图片描述
##12秒后文件被删除
[root@foundation70 tmpfiles.d]# systemd-tmpfiles --clean /usr/lib/tmpfiles.d/cai.conf
在这里插入图片描述

[root@localhost tmpfiles.d]# systemd-tmpfiles –create /usr/lib/tmpfiles.d/haha.conf #创建临时文件的任务
[root@localhost tmpfiles.d]# systemd-tmpfiles –clean /usr/lib/tmpfiles.d/haha.conf #删除临时文件的任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值