系统定时、延时任务及临时文件管理

1.管理定期任务cron

1.概念

  • cron设备管理必须按计划定期重复运行的程序
  • 后台程序crond每分钟唤醒一次,以运行计划的任何任务用户使用crontab命令计划个人任务
  • 系统管理员可以在系统范围配置文件中设置任务
  • 单个用户使用名称为crontab(cron表)的文本文件登记任务
  • crontab这个命令所设置的任务将会循环的一直执行下去,可循环的时间为分钟、小时、每周、每月或每年等
  • crontab除了可以使用命令执行外,亦可编辑 /etc/crontab来支持
  • 可以让crontab生效的服务是crond
  • 这种计划任务的种类是例行性的,就是每隔一定的周期要来办的事项

2.crontab

crontab -l列出查看crontab的任务内容
crontab -e编辑crontab的任务内容
crontab -r删除所有的crontab的任务内容
crontab -u username -l/-e/-r只有root才能执行此任务,即帮其他使用者建立/删除crontab计划任务
crontab -r -i删除时询问是否删除
[root@localhost Desktop]# crontab -l     ##查看任务内容
* * * * * rm -rf /mnt/*
[root@localhost Desktop]# cat /var/spool/cron/root   ##查看任务内容
* * * * * rm -rf /mnt/*
[root@localhost Desktop]# crontab -e -u root   ##root用户编辑任务内容
no crontab for root - using an empty one
crontab: installing new crontab
##编辑的内容为 : * * * * * rm -rf /mnt/*  
[root@localhost Desktop]# crontab -r    ##删除任务
[root@localhost Desktop]# crontab -l    ##查看任务内容
no crontab for root    ##已删除
[root@localhost Desktop]# crontab -l    ##查看任务内容
* * * * * rm -rf /mnt/*
[root@localhost Desktop]# crontab -r -i   ##删除任务并询问是否删除
crontab: really delete root's crontab? yes   ##输入yes
[root@localhost Desktop]# crontab -l     ##查看任务内容
no crontab for root      ##已删除

3.cron时间表示方式

  • 使用crontab -e进入到 vi 的编辑页面,每项任务都是一行
  • 编辑完成后输入【:wq】退出并保存
  • 每项任务的格式都具有六个字段
  • 格式为 * * * * * 命令
分钟0~59
小时0~23
日期1~31
月份1~12
0~7
命令需要执行的命令
* (星号)代表任何时刻都接受
,(逗号)代表分隔时段
-(减号)代表一段时间范围内
/n(斜线)n代表数字,即是每隔n单位间隔的意思
  • eg:
05 * * * *每小时整点过5分钟
05 02 * * *每天2:05am
30 08 01 * *每月第一天08:30am
00 07 25 12 *12月25日7:00am
30 16 * * 5每个星期五4:30pm
*/5 * * * *每5分钟(0、5、10…50、55)
*/10 9-17 1,15 * *每月的1号和15号9:00am至5:00pm之间每隔10分钟(在5:00pm不会运行,最后一次运行是在4:50pm)

4.crontab注意事项:

  • 属于系统的任务通常保存在 /etc/crontab文件中而不是使用crontab -e编辑保存在个人文件中
  • 比较好的做法是用文本编辑器创建crontab文件并保存到 /etc/cron.d中(避免更新系统软件包cronie时出现问题)
  • /etc/cron.d/crontab文件在日期说明后另加一个字段,表示将运行作业的用户
  • 对于每天、每周或每月运行一次的脚本,可以直接将其设置为可执行文件,并保存在 **/etc/cron.{daily,weeky,monthly}**中相应目录下
  • 这些任务由 /etc.anacrontab 配置的系统 anacron 服务运行
  • anacron是cron的集成组件,用于更好的管理作业,并确保在作业

5.crond服务读取配置文件的位置

  • 一般来说,crond默认有3个地方会执行脚本配置文件,分别为:
  • /etc/crontab,与系统运行有关
  • /etc/cron.d/*,与系统运行有关
  • /var/spool/cron/*,跟用户自己的任务有关

6.cron权限设定

  • 在系统中默认所有用户可以设定cron
  • 用户黑名单:/etc/cron.deny将不可以使用crontab的帐号写入其中,未记录到此文件中的用户就可以使用crontab
  • 用户白名单:/etc/cron.allow将可以使用crontab的帐号写入其中,不在此文件内的用户就不可以使用crontab
  • /etc/cron.allow优先级高于 /etc/cron.deny
  • 系统默认保留 /etc/cron.deny

2.延时任务at

1.概念

  • at是个可以处理仅执行一次就结束的命令
  • 在执行at时,必须要有atd这个服务的支持
  • 在某些linux中,atd可能默认并没有启动,那么at这个命令就会失效
  • 这种计划任务的方式是突发性的,就是这次做完以后就没有的任务
  • 使用at命令产生所要运行的任务时,在输入at命令之后,按【Enter】并继续输入任务中包含的其他命令,任务可由多条命令组成,在完成要运行的命令时,在单独出现的一行按【Ctrl+d】完成任务
  • at命令必须指定任务运行的时间

2.at

at 时间在此时间时执行此任务,若该时间已过,则明天的此时间执行
at -l列出目前系统中所有该使用者的at计划
at -c 任务序号查看任务中的命令并立即执行该任务
at -r/-d 任务序号取消此序号的任务
at now+1min在某时间点之后1分钟执行
atq用法同at -l
atrm + jobnumber用法同at -r
[root@localhost mnt]# ls    ##显示/mnt/中的文件
file1  file2  file3  file4  file5
[root@localhost mnt]# date    ##显示当前时间
Wed Oct 30 18:09:14 EDT 2019
[root@localhost mnt]# at 18:11    ##在18:11时执行删除/mnt/中任何文件的命令
at> rm -rf /mnt/*
at> <EOT>
job 1 at Wed Oct 30 18:11:00 2019
[root@localhost mnt]# ls   ##显示/mnt/中的文件,已删除
[root@localhost mnt]# ls            ##显示/mnt/中的内容
file1  file2  file3  file4  file5
[root@localhost mnt]# at now+10minutes  ##在10分钟后执行此命令
at> rm -rf /mnt/*
at> <EOT>
job 4 at Wed Oct 30 18:31:00 2019
[root@localhost mnt]# at now+20minutes   ##在20分钟后执行此命令
at> touch text{1..3}
at> <EOT>
job 5 at Wed Oct 30 18:41:00 2019
[root@localhost mnt]# at -l    ##显示任务
4	Wed Oct 30 18:31:00 2019 a root
5	Wed Oct 30 18:41:00 2019 a root 
[root@localhost mnt]# at -r 4   ##取消任务4
[root@localhost mnt]# at -l     ##显示任务
5	Wed Oct 30 18:41:00 2019 a root   ##任务5依然存在
[root@localhost mnt]# ls   ##查看/mnt/内容
file1  file2  file3  file4  file5
[root@localhost mnt]# at now+1min   ##在1分钟后执行此命令
at> rm -rf /mnt/*
at> <EOT>
job 6 at Wed Oct 30 18:28:00 2019
[root@localhost mnt]# at -l     ##查看任务
6	Wed Oct 30 18:28:00 2019 a root
[root@localhost mnt]# at -c 6   ##执行任务6
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=14; export XDG_SESSION_ID
HOSTNAME=localhost; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=172.25.254.79\ 59388\ 22; export SSH_CLIENT
OLDPWD=/root; export OLDPWD
SSH_TTY=/dev/pts/1; export SSH_TTY
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/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/mnt; export PWD
LANG=en_US.UTF-8; export LANG
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=172.25.254.79\ 59388\ 172.25.254.80\ 22; export SSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
cd /mnt || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER443554d4'
rm -rf /mnt/*

marcinDELIMITER443554d4
[root@localhost mnt]# ls   ##查看/mnt/中的内容,显示删除成功
[root@localhost mnt]# touch text{1..5}   ##建立文件
[root@localhost mnt]# ls    ##显示内容
text1  text2  text3  text4  text5
[root@localhost mnt]# at now+10minutes    ##在10分钟之后执行
at> rm -rf /mnt/*
at> <EOT>
job 7 at Wed Oct 30 19:40:00 2019
[root@localhost mnt]# atq    ##显示任务
7	Wed Oct 30 19:40:00 2019 a root
[root@localhost mnt]# at now+20minutes    ##在20分钟后执行
at> touch file
at> <EOT>
job 8 at Wed Oct 30 19:51:00 2019
[root@localhost mnt]# atq    ##显示任务
7	Wed Oct 30 19:40:00 2019 a root
8	Wed Oct 30 19:51:00 2019 a root

3.注意:

  • 在将某一次at作业设置运行之后,可以通过使用atq命令列出任务编号及次数
  • at还可以在一个任务里输入多条命令
  • at的执行与终端环境无关,而所有标准输出/标准错误输出都会发送到执行者的mailbox中

4.at权限设定

  • 用户黑名单:/etc/at.deny 写在这个文件中的用户不能使用at
  • 用户白名单:/etc/at.allow 写在这个文件中的用户才能使用at
  • 白名单不存在需要建立,黑名单系统默认存在
  • /etc/at.allow 优先级高于 /etc/at.deny
  • 黑白名单对root用户没有限制

3.临时文件管理

  • 系统中的 /usr/lib/tmpfiles.d 文件标示了服务的临时文件的存放位置
  • vim /usr/lib/tmpfiles.d/file.conf #在/usr/lib/tmpfiles.d/中编辑文件file.conf,设置临时文件的策略
  • d /mnt/aaa 1777 root root 10s #文件file.conf的内容
  • systemd-tmpfiles --create /usr/lib/tmpfiles.d/* #以此策略为原则建立目录
  • systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* #清除以此策略为原则的目录下达到生命周期的文件
  • 注意:当某文件没有达到生命周期时,则不能被清除
[root@localhost ~]# cd /usr/lib/tmpfiles.d/    ##切换到目录/usr/lib/tmpfiles.d/
[root@localhost tmpfiles.d]# vim aaa.conf      ##编辑文件aaa.conf
[root@localhost tmpfiles.d]# systemd-tmpfiles --create /usr/lib/tmpfiles.d/*             ##建立目录
[root@localhost tmpfiles.d]# touch /mnt/aaa/file1    ##建立文件file1
[root@localhost tmpfiles.d]# ls -lR /mnt/    ##显示/mnt/中的内容
/mnt/:
total 0
drwxrwxrwt 2 root root 18 Oct 30 20:32 aaa

/mnt/aaa:
total 0
-rw-r--r-- 1 root root 0 Oct 30 20:32 file1   ##file1存在
[root@localhost tmpfiles.d]# systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*     ##清除到达生命周期的文件
[root@localhost tmpfiles.d]# ls -lR /mnt/    ##显示/mnt/的内容,清除成功
/mnt/:
total 0
drwxrwxrwt 2 root root 6 Oct 30 20:32 aaa

/mnt/aaa:
total 0
[root@localhost tmpfiles.d]# touch /mnt/aaa/file2    ##建立文件file2
[root@localhost tmpfiles.d]# ls -lR /mnt/    ##显示/mnt/的内容
/mnt/:
total 0
drwxrwxrwt 2 root root 18 Oct 30 20:34 aaa

/mnt/aaa:
total 0
-rw-r--r-- 1 root root 0 Oct 30 20:34 file2   ##file2存在
[root@localhost tmpfiles.d]# systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*    ##清除没有达到生命周期的文件
[root@localhost tmpfiles.d]# ls -lR /mnt/    ##显示/mnt/的内容
/mnt/: 
total 0
drwxrwxrwt 2 root root 18 Oct 30 20:34 aaa

/mnt/aaa:
total 0
-rw-r--r-- 1 root root 0 Oct 30 20:34 file2   ##file2存在,清除未成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值