延时任务
延时任务是我们规定在几点或者在多久之后让系统执行的某一任务
设置延时任务的步骤:
at time(时间)
dosomething(具体的任务)
ctrl+d(执行该延时任务)
系统延时命令
at
at -l 查看执行的延时任务
at -c 5 查看任务5的详细信息
at -l 5 查看任务5的基础信息
[root@localhost ~]$ at now+1min ##在1分钟后
at> echo hello ##执行echo hello 的命令
at> <EOT> ##执行ctrl + d
job at Sun Nov 4 01:33:00 2018 生成此任务的任务号
[root@localhost ~]$ at -l 4 查看任务4的基本信息
4 Sun Nov 4 01:33:00 2018 a root
[root@localhost ~]$ at -c 5 查看任务5的详细信息
${SHELL:-/bin/sh} << 'marcinDELIMITER21832c28'
echo hello
at命令,黑白名单
/etc/at.deny 黑名单(在白名单不存在时黑名单生效)
/etc/at.allow 白名单(与黑名单同时存在时,白名单无效)
编辑这两个文件,就可以实现at命令对特定用户开放
vim /etc/at.deny
在黑名单中添加gq用户
[root@localhost ~]# su - gq
Last login: Sun Nov 4 01:31:58 CST 2018 on pts/0
[gq@localhost ~]$ at
You do not have permission to use at.
可以看到gq用户不能执行at命令
[root@localhost ~]# su - westos
Last login: Sun Nov 4 01:29:23 CST 2018 on pts/0
[westos@westos ~]$ at now+1min
at> echo hello
at> <EOT>
job 5 at Tue Nov 6 14:49:00 2018
[westos@westos ~]$ at -l 5
5 Tue Nov 6 14:49:00 2018 a westos
而westos用户因不在黑名单中依旧可以执行at命令
系统中默认是没有at命令的白名单的,我们先创建这样一个文件
默认全黑,若要允许哪个用户可以使用at命令,则在白名单中写入用户名即可。
可以看到gq用户同时在黑白名单里,但是白名单生效
编辑白名单写入gq用户
系统定时任务(由crond.service服务提供)
发起定时任务
定时任务可以设定在哪一天哪一小时等循环地做某一件事情,我们可以用man 5 crontab来查看其具体用法
[root@localhost ~]# systemctl status crond.service 查看服务的状态信息
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-11-04 00:32:13 CST; 1h 15min ago
Main PID: 1224 (crond)
CGroup: /system.slice/crond.service
└─1224 /usr/sbin/crond -n
Nov 04 00:32:13 localhost.localdomain systemd[1]: Star...
Nov 04 00:32:13 localhost.localdomain systemd[1]: Star...
Nov 04 00:32:13 localhost.localdomain crond[1224]: (CR...
Nov 04 00:32:14 localhost.localdomain crond[1224]: (CR...
Hint: Some lines were ellipsized, use -l to show in full.
man 5 crontab 查到的信息
1>方式1
[root@localhost ~]# crontab -u root -e 以root用户身份发起定时任务
no crontab for root - using an empty one
crontab: installing new crontab
编辑内容 (注意: * * * * * ==> 分,时,天,月,周)
* * * * * rm -fr /gaoqi/* ( 表示每分钟删除/gaoqi/*)
[root@localhost ~]# crontab -u root -l 查看root用户的定时任务
* * * * * rm -fr /gaoqi/*
[root@localhost ~]# crontab -u root -r 取消root用户的所有定时任务
[root@localhost ~]# crontab -u root -l
no crontab for root
root@localhost ~]# crontab -u gq -e 以gq这个用户发起定时任务
03 22 * * * rm -fr /mnt/* (编辑内容) 每天的22:03删除/mnt/*
[root@localhost etc]# cat /var/spool/cron/gq 定时任务生成的文件存放在/var/spool/cron/root 目录
03 22 * * * rm -fr /mnt/*
2>方式2
编辑的文件其实就是/var/spool/cron/目录下的文件,文件名是指定的用户,没有指定用户就是root用户:
crontab 命令,黑白名单
/etc/cron.deny 黑名单(在白名单不存在时黑名单生效)
/etc/cron.allow 白名单(与黑名单同时存在时,白名单无效)
编辑这两个文件,就可以实现cron命令对特定用户开放
黑名单的设定
[root@localhost etc]#vim /etc/cron.deny
在黑名单中写入gq用户
[root@westos ~]# su - gq
Last login: Tue Nov 6 15:45:02 EET 2018 on pts/1
[gq@westos ~]$ crontab -e
You (gq) are not allowed to use this program (crontab)
See crontab(1) for more information
可看到在黑名单中的gq用户无法执行定时命令
[gq@westos ~]$ logout
[root@westos ~]# crontab -u gq -e
crontab: installing new crontab
退出登陆,可以看到用超级用户身份指定gq用户执行定时命令是可以的
白名单的设定
与延时命令黑名单设置类似
我的白名单未写入用户,默认全黑。
系统对临时文件的管理
[root@localhost mnt]# cd /etc/cron.d
[root@localhost cron.d]# ls
0hourly raid-check sysstat
[root@localhost cron.d]# vim westos
* * * * * root rm -fr /mnt/*
[root@localhost cron.d]#
[root@localhost cron.d]# cd /etc/cron.daily/
[root@localhost cron.daily]# ls
0yum-daily.cron logrotate man-db.cron mlocate rhsmd
[root@localhost cron.daily]# ana
anaconda
anaconda-cleanup
anaconda-disable-nm-ibft-plugin
anacron 错过的命令,会在开启服务时立即执行
analog
[root@localhost cron.daily]# anacron
[root@localhost cron.d]# cd /usr/lib/tmpfiles.d/
[root@localhost tmpfiles.d]# ls
abrt.conf rpcbind.conf
cups.conf rpm.conf
cups-lp.conf samba.conf
etc.conf sap.conf
gvfsd-fuse-tmpfiles.conf selinux-policy.conf
initscripts.conf setroubleshoot.conf
iscsi.conf spice-vdagentd.conf
legacy.conf subscription-manager.conf
libselinux.conf systemd.conf
libstoragemgmt.conf systemd-nologin.conf
lvm2.conf tmp.conf
mdadm.conf tuned.conf
pam.conf var.conf
ppp.conf x11.conf
radvd.conf
在这个目录下,以.conf结尾的文件都是临时文件处理的配置文件,可以打开,作为参考模版
[root@localhost tmpfiles.d] vim westos.conf
d /mnt/westos 777 root root 20s
[root@localhost tmpfiles.d]# systemd-tmpfiles --creat /usr/lib/tmpfiles.d/*
[root@localhost tmpfiles.d]# cd /mnt
[root@localhost mnt]# touch /mnt/westos/file1