linux基础(二十)延时及定时任务、临时文件管理
系统延时任务
at命令发起的延时间任务都是一次性的
一、格式:at+time
[[email protected] ~]# at 02:15
at> touch /mnt/file<EOT> ##延迟动作,表示在/mnt下创建一个file
at> <EOT> ##ctrl+d表示发起动作,可以退出编辑界面
job 1 at Mon Nov 13 02:15:00 2017
##表示在2点15分自动执行touch /mnt/file这个动作
二、参数
1)at -l | atq #查看当前任务
[[email protected] ~]# at -l
1 Mon Nov 13 02:15:00 2017 a root ##1代表任务号
[[email protected] ~]# atq
1 Mon Nov 13 02:15:00 2017 a root
2)atrm | at -d +任务号 #取消指定任务
[[email protected] ~]# at -l
2 Mon Nov 13 02:22:00 2017 a root
[[email protected] ~]# at -d 2
[[email protected] ~]# at -l
[[email protected] ~]#
3)at -c +任务号 #查看任务内容
[[email protected] ~]# at -l
3 Mon Nov 13 02:25:00 2017 a root
[[email protected] ~]# at -c 3
...
${SHELL:-/bin/sh} << 'marcinDELIMITER1d7b33c2'
touch /mnt/file
marcinDELIMITER1d7b33c2
4)at now+1min #延迟一分钟
[[email protected] ~]# at now+1min
at> rm -f /mnt/file
at> <EOT>
job 4 at Mon Nov 13 02:30:00 2017
5)at -f file #延迟执行文件中的内容
[[email protected] ~]# at 02:35 -f mission
job 6 at Mon Nov 13 02:35:00 2017
[[email protected] ~]# cat mission
touch /mnt/file
6)at -m #延迟命令没有输出时仍然发送邮件给执行者
一般延迟动作写类似touch file这样的不会发送邮件,但加上-m可以打破这个规律
[[email protected] ~]# at 02:41 -m
at> touch /mnt/file
at> <EOT>
job 8 at Mon Nov 13 02:41:00 2017
[[email protected] ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 2 messages 1 new
1 Anacron Sat Oct 21 21:46 21/803 "Anacron job 'cron.dai"
>N 2 root Mon Nov 13 02:41 13/483 "Output from your job "
& 2
Message 2:
From [email protected] Mon Nov 13 02:41:01 2017
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Subject: Output from your job 8
Date: Mon, 13 Nov 2017 02:41:01 +0800 (CST)
From: [email protected] (root)
Status: R
&
tip:按q退出
7)at -M #延迟命令有输出时但不发送邮件给执行者
一般延迟动作写类似echo hello这样的会发送邮件,但加上-M可以打破这个规律
三、at 命令的执行权力设定
默认系统中全部用户 都有执行at命令的权力
1.用户黑名单
默认情况下,系统中是存在用户黑名单的,这个名单的路径
/etc/at.deny ##用户黑名单,此名单默认为空,并且在白名单不存在时生效
vim /etc/at.deny
student ##student使用at命令的权力被禁止
测试:
[[email protected] ~]# vim /etc/at.deny
student
[[email protected] ~]# su - student
Last login: Tue Oct 31 23:03:04 CST 2017 on pts/0
[[email protected] ~]$ at 12:00
You do not have permission to use at.
2.用户白名单
默认系统中是不存在at的白名单的
但是当白名单出现,系统用户除名单中出现的用户以及root
其他用户均不能执行at命令
touch /etc/at.allow #建立用户白名单,当白名单出现,黑名单失效
测试:
[[email protected] student]# touch /etc/at.allow
student
[[email protected] student]# vim /etc/at.allow
[[email protected] student]# su - student
Last login: Thu Nov 2 11:51:31 CST 2017 on pts/0
[[email protected] ~]$ at now+1min
at> cd /mnt<EOT>
job 12 at Thu Nov 2 11:58:00 2017
可以看到刚才黑名单中的student失效了,并且student以外的用户不能使用at命令
系统定时任务
写入程序的时间时永久保存的
一、crontab执行方法
这个命令由crond.service 服务提供
1.方法一:
crontab -e -u+用户名称(-u+用户名可以不写,就表示使用当前用户)
内容格式:分 时 天 月 周 动作
crontab -l #列出当前用户的cron任务,同样可以使用“-u 用户名称”方式
crontab -r #删除当前用户的cron任务,同样可以使用“-u 用户名称”方式
2.方法二:
/var/spool/cron/* ##cron任务记录文件存放位置,不同用户的定时任务会有这个用户的名字文件。直接更改这个文件里面的内容和用crontab -e效果是一样的,crontab -e命令其实也只是打开了这个目录下的相应用户文件让你编辑而已。
测试:
[[email protected] ~]# ls /var/spool/cron/
root student
[[email protected] ~]# cat /var/spool/cron/root
* * * * * touch /mnt/file1
[[email protected] ~]# cat /var/spool/cron/student
* * * * * touch /mnt/file2
二、crontab命令使用控制
1.用户黑名单
默认情况下,系统中只存在黑名单,当白名单被建立,黑名单失效
/etc/cron.deny ##在此名单中的用户不能执行crontab
vim /etc/cron.deny
student ##student用户不能执行crontab
我们可以看到/etc/cron.deny是默认存在的
2.白名单
默认情况下,系统中只存在黑名单,当白名单被建立,黑名单失效
/etc/cron.allow ##用户白名单,当此名单出现,除root用户及名单中的用户,其他用户不能执行crontab
touch /etc/cron.allow ##建立白名单
我们可以看到,默认是没有/etc/cron.allow这个文件的。
vim /etc/cron.allow
student ##只有student和root用户可以执行crontab,并且会使黑名单里的student限制失效。
三、其他方式发起定时任务
vim /etc/cron.d/文件 #可以设定多个用户身份cron
分 时 天 月 周 用户 动作
测试:
vim /etc/cron.d/aaa #aa这个文件名字随意
* * * * * root touch /tmp/rootfile
* * * * * server1 touch /tmp/server1file
这个文件表示每分钟root用户在/tmp下建立rootfile;每分钟server1用户在/tmp下建立server1file文件
##这个定时任务自成一体,是不受crontab黑白名单限制的,crontab名单限制的只是某个用户不能使用crontab命令而已。而这里的定时任务原理是root为发起者(当然要保证写这个文件的是root用户),通知某一个或几个普通用户做什么什么动作,因此和crontab并不能影响root的决策。
watch -n 1 ls -l /tmp/ #监控tmp目录下文件
1分钟之前:
1分钟之后:
可以看到,在aaa中配置的让哪个用户建立就会产生属于哪个用户名和组的文件。
系统临时文件管理
#系统中服务在正常运行时会产生临时文件
1.创建配置任务
/usr/lib/tmpfiles.d/*.conf ##系统中临时文件的配置,*这里的名字可以随意起
文件类型 文件名称 文件权限 文件所有人 文件所有组 文件存在时间
d /mnt/redhat 777 root root 100s
##表示在/mnt下创建redhat目录并且只存在100s
2.执行配置文件
systemd-tmpfiles --create /usr/lib/tmpfiles.d/* ##执行临时文件配置,*为刚才创建的文件名字
3.经过100秒之后执行下面命令才可以让redhat目录消失,因此可以把上面那条和下面这条命令都写入crontab任务每分钟执行就达到了创建临时目录/文件的目的
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* ##清理临时文件,*为刚才创建的文件名字