linux系统中的延时任务与定时任务
通过使用延时任务和定时任务,我们可以更自动化地去管理系统。
延时任务只在设定的时间执行一次。
而定时任务则是在固定时间周期循环执行。
延时任务
使用at命令设置延时任务:
两种方式:
(1)at 具体时间
at 09:14
(2)at now+延迟时间
at now+1min
at -l 查看(未执行)延时任务列表
at -c num 查看num号延时任务的具体内容
at -r num 取消num号延时任务的设定
(num号为at -l命令所显示的列表中的序号)
注意:
当任务有输出时,输出会以邮件的形式发送给at任务的发起者
(即是向延时任务的发起者进行任务的执行情况的结果的报告反馈)
查看用户邮件:
mail -u username 查看username用户的邮件
n 查看第n封邮件内容
q 退出邮件查看
下图为例:
图一中,可见延时任务设定方式:
at 命令进入延时任务的设定
touch file 为延时任务的内容,回车后,使用ctrl+d发起延时任务。
显示4号延时任务(job4),将在14:25:00执行
图二中,使用第二种方式的at命令,我在14:29时使用at命令,设定任务应该在14:30执行;
但是,我在14:30以后才使用ctrl+d发起该延时命令,此时该延时任务立即执行了。
图三,四,五中,显示at -l,at -c,at -r命令的执行结果:
图三中,我设定了一个延时任务,并使用at -l显示,at -c查看其任务内容
在图四中的最后一行,我们可以看到显示了任务内容为:echo hello
图五中,我设定了第二个延时任务,并使用at -r将其取消
图六中,我设定了延时任务输出hello,并在邮件中查看其内容:
延时任务的执行权限(黑白名单)
系统中默认所有用户都是可以执行at命令的
/etc/at.deny 黑名单(拒绝名单)
/etc/at.allow 白名单(允许名单)
我们系统中是默认存在/etc/at.deny文件的,且其内容为空;因此默认所有用户都是可以执行at命令的
但是/etc/at.allow却不是默认存在的,当我们建立该文件时,系统就会只读取该文件而不再读取/etc/at.deny文件。
因此/etc/at.allow文件的优先级要高于/etc/at.deny文件
下图为例:
图一,二中,为设置黑名单前后的执行结果:
图一中,初始黑名单为空,mike用户可以使用at命令;更改黑名单后,mike用户无法使用at命令。
图二为黑名单更改后的内容。
图三,四中,为设置白名单前后的执行结果:
图三为我新建的白名单内容,未写入内容,为空。
图四中,可见初始无白名单。我将黑名单编辑为空文件,新建白名单也为空,此时mike用户仍然无法使用at命令。可见,白名单的优先级别更高
定时任务
定时任务的最小单位是分钟。
crontab命令设定定时任务:
crontab -u username -r 将用户的所有定时任务都删除
crontab -u username -e 设定用户的定时任务
crontab -u username -l 查看用户的定时任务
crontab 中时间的表示方式:
* * * * *
分别表示时间单位:
分钟,小时,天,月,周
更多的详细设定可以查阅:man 5 crontab
示例:
* 2 * * *
每天第2小时(2点)执行定时任务
* /2 * * *
每天的每2小时执行一次定时任务
注意:
crontab命令是由crond服务来控制的,只有crond服务开启的时候,crontab命令才有效
以文件的方式设定定时任务:
vim /etc/cron.d/file
* * * * * root touch /dir
下图为例:
图一中,使用crontab -e命令设定root用户的定时任务。并在执行一次后,使用crontab -r命令将该定时任务删除
图二中可见,关闭crond服务后,定时任务不再执行
图三,四中,为文件方式设定定时任务。编辑保存文件后,即设定完成定时任务
定时任务的执行权限(黑白名单)
与延时任务一样,系统中默认所有用户都是可以执行crontab命令的
/etc/cron.deny 黑名单(拒绝名单)
/etc/cron.allow 白名单(允许名单)
我们系统中是默认存在/etc/cron.deny文件的,且其内容为空;因此默认所有用户都是可以执行at命令的
但是/etc/cron.allow却不是默认存在的,当我们建立该文件时,系统就会只读取该文件而不再读取/etc/cron.deny文件。
因此/etc/cron.allow文件的优先级要高于/etc/cron.deny文件
设定方式也和延时任务一样
下图为例:
临时文件的管理
cd /usr/lib/tmpfiles.d/
在该目录下的.conf文件中,编辑内容,使用相应的命令systemd-tmpfiles --create/clean便可以用于管理临时文件
下图为例: