linux运维基础——————at命令、定时任务和延迟任务的详细说明、利用crontab命令设定系统定时任务(永久)、tmpfile系统中临时文件的管理方式

1. at

1.1 at设定定时任务

实验环境为我的服务器server。

1)采用watch -n 1 ls -l /tmp/song/监控命令,监控该过程

[root@server ~]# watch -n 1 "ls -l /tmp/song"
Every 1.0s: ls -l  /tmp/song                              Sat Aug  8 04:11:30 2020

total 0 # 此目录下现在没有任何内容

2)重新开启一个终端,用date查看一下的当前时间

[root@server ~]# date
Sat Aug  8 04:12:20 CST 2020

3)at 时间 回车,此时就可以建立任务了 ctrl+d退出

[root@server ~]# date
Sat Aug  8 04:13:53 CST 2020
[root@server ~]# at 04:15 # 建立定时任务
at> touch /tmp/song/file1 # 建立一个文件在这个目录下
at> <EOT> # ctrl+D结束
job 1 at Sat Aug  8 04:15:00 2020

可以看到04:14时还没有建立这个文件:

Every 1.0s: ls -l  /tmp/song                              Sat Aug  8 04:14:39 2020

total 0

4)到设定的时间查看

Every 1.0s: ls -l  /tmp/song                              Sat Aug  8 04:15:01 2020

total 0
-rw-r--r-- 1 root root 0 Aug  8 04:15 file1 # 定时任务已经执行,文件已经建立成功

1.2 at查看定时任务

at -l列出定时任务
at -c 2查看序号为2的任务
at -r 3删除序号为3的任务

1)首先设定两个定时任务

[root@server ~]# at 04:22
at> touch filesong # 任务内容
at> <EOT>
job 2 at Sat Aug  8 04:22:00 2020
[root@server ~]# at 04:23
at> rm -fr filesong # 任务内容
at> <EOT>
job 3 at Sat Aug  8 04:23:00 2020

2)查看定时任务

[root@server ~]# at -l # 查看任务列表
2	Sat Aug  8 04:22:00 2020 a root
3	Sat Aug  8 04:23:00 2020 a root

3)查看第二个定时任务

[root@server ~]# at -c 2
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=42; export XDG_SESSION_ID
HOSTNAME=server.example.com; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=172.25.5.250\ 47136\ 22; export SSH_CLIENT
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=/root; export PWD
XMODIFIERS=@im=ibus; export XMODIFIERS
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.5.250\ 47136\ 172.25.5.10\ 22; export SSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
cd /root || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER3670055b'
touch filesong #真正的任务内容,其他东西是执行定时任务时的环境变量

marcinDELIMITER3670055b

3)删除第三个定时任务

[root@server ~]# at -r 3
[root@server ~]# at -l # 任务列表中就只有第二条任务了
2	Sat Aug  8 04:22:00 2020 a root

1.3 at设定延时任务

1)设定延时任务

[root@server ~]# at now+2min
at> touch /tmp/song/file3
at> <EOT>
job 5 at Sat Aug  8 04:28:00 2020
[root@server ~]# at -l
5	Sat Aug  8 04:28:00 2020 a root

2)查看延时任务是否完成

Every 1.0s: ls -l  /tmp/song                              Sat Aug  8 04:28:04 2020

total 0
-rw-r--r-- 1 root root 0 Aug  8 04:15 file1
-rw-r--r-- 1 root root 0 Aug  8 04:26 file2
-rw-r--r-- 1 root root 0 Aug  8 04:28 file3 # 所有的任务都是整点完成

1.4 at任务的黑白名单

/etc/at.deny:黑名单,系统中默认存在,在此文件中出现的用户不能执行at

/etc/at.allow:白名单,系统中默认不存在,在此文件中出现的普通用户能执行at,只有在名单中的用户可以,并且/etc/at.deny失效

也就是说先看deny,除了文件中的用户,其他用户都可以使用at命令。再看allow如果使用,deny中内容失效,并且只有allow中的用户可以使用at命令。

1)设定黑名单

[root@server ~]# vim /etc/at.deny  # 先写at黑名单
[root@server ~]# cat /etc/at.deny 
song # song和ru用户不能设定at任务
ru

2)测试一下

[root@server ~]# su - song # 切换到song用户
[song@server ~]$ at now+1min
You do not have permission to use at. # 不能使用延时任务
[song@server ~]$ exit
logout
[root@server ~]# su - ru # 切换到ru用户
[ru@server ~]$ at now+1min 
You do not have permission to use at. # 不能使用延时任务
[ru@server ~]$ exit
logout
[root@server ~]# su - yan # 切换到yan用户
[yan@server ~]$ at now+1min # 可以设定延时任务
at> touch file1
at> <EOT>
job 6 at Sat Aug  8 04:35:00 2020

黑名单外的用户可以使用at,黑名单内不能使用。

3)编辑白名单

[root@server ~]# vim /etc/at.allow # 这是一个新文件,系统中本来没有
[root@server ~]# cat /etc/at.allow 
song # 白名单中有song用户

4)测试

[root@server ~]# su - song 
Last login: Sat Aug  8 04:34:04 CST 2020 on pts/1
[song@server ~]$ at now+1min # 白名单中的song用户可以使用at
at> touch aaa
at> <EOT>
job 7 at Sat Aug  8 04:40:00 2020
[song@server ~]$ exit
logout
[root@server ~]# su - ru 
Last login: Sat Aug  8 04:34:35 CST 2020 on pts/1
[ru@server ~]$ at now+1min # 黑名单中的ru依旧不可以使用at
You do not have permission to use at.
[ru@server ~]$ exit
logout
[root@server ~]# su - yan 
Last login: Sat Aug  8 04:34:51 CST 2020 on pts/1
[yan@server ~]$ at now+1min # 不再白名单也不在黑名单中的yan用户也不能使用at
You do not have permission to use at.
[yan@server ~]$ exit
logout

注意:

  • /etc/at.allow存在/etc/at.deny就失效

  • 系统本来就没有/etc/at.allow,当这个文件建立之后即使是空的,其他普通用户也不能使用at命令了,此时只有超级用户是可以定时的

  • 当song同时出现在allow和deny当中时,deny会失效,因此song可以使用at命令。

2.利用crontab命令设定系统定时任务

2.1 命令介绍

1)系统控制crontab的服务

[root@server ~]# systemctl start crond.service # 执行定时任务的时候,crond.service这个服务必须开启
[root@server ~]# systemctl status crond.service
crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since Fri 2020-08-07 10:51:49 CST; 18h ago
   # 服务开启成功
 Main PID: 551 (crond)
   CGroup: /system.slice/crond.service
           └─551 /usr/sbin/crond -n

Aug 07 10:51:49 study.example.com systemd[1]: Started Command Scheduler.
Aug 07 10:51:49 study.example.com crond[551]: (CRON) INFO (RANDOM_DELAY will b...)
Aug 07 10:51:49 study.example.com crond[551]: (CRON) INFO (running with inotif...)
Aug 08 04:53:48 server.example.com systemd[1]: Started Command Scheduler.
Hint: Some lines were ellipsized, use -l to show in full.

2)crontab 命令后面所跟的参数

crontab [选项]

选项:
e 	表示编辑
u 	表示用户
l 	表示列出
r 	表示删除

3)具体用法:

crontab -e -u root 	为root用户创建计划任务
crontab -l -u root 	列出root用户的计划任务
crontab -r -u root 	删除root用户的计划任务

/var/spool/cron/用户名定时任务是放在这个文件里面的

对应用户含有自己的定时任务文件

删除任务的同时文件也就没有了,删除文件的同时任务也就没有了

4)crontab 时间表示方式

分钟 时 日 月 星期几具体时间
* * * * *每分钟
*/2 * * * *每两分钟
*/2 07-17 * * *早7-晚5每两分钟
*/2 */2 * * *每隔2小时每两分钟
*/2 09-17 3,5 15月的每个周四以及三月1号
*/2 09-17 * * 5每周周五早9晚5

2.2 设定定时任务

1)crond服务必须开启

[root@server ~]# systemctl start crond.service # 执行定时任务的时候,crond.service这个服务必须开启
[root@server ~]# systemctl status crond.service
crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)
   Active: active (running) since Fri 2020-08-07 10:51:49 CST; 18h ago
   # 服务开启成功
 Main PID: 551 (crond)
   CGroup: /system.slice/crond.service
           └─551 /usr/sbin/crond -n

Aug 07 10:51:49 study.example.com systemd[1]: Started Command Scheduler.
Aug 07 10:51:49 study.example.com crond[551]: (CRON) INFO (RANDOM_DELAY will b...)
Aug 07 10:51:49 study.example.com crond[551]: (CRON) INFO (running with inotif...)
Aug 08 04:53:48 server.example.com systemd[1]: Started Command Scheduler.
Hint: Some lines were ellipsized, use -l to show in full.

2)crontab -e -u root 为root用户创建定时任务

[root@server ~]# crontab -e -u root
# 这是时类似于vim的编辑方式

* * * * * /bin/echo hello

# 编辑结束后,会显示
[root@server ~]# crontab -e -u root
no crontab for root - using an empty one # root没有过定时任务
crontab: installing new crontab # 新建了一个定时任务表给root用户

3)crontab -l -u root列出root用户的定时任务

[root@server ~]# crontab -l -u root
* * * * * /bin/echo hello

4)cat /var/spool/cron/root在这个文件里面可以看到定时任务

[root@server ~]# cat /var/spool/cron/root 
* * * * * /bin/echo hello

5)crontab -r -u root 删除root用户的定时任务

[root@server ~]# crontab -r -u root
[root@server ~]# cat /var/spool/cron/root # 对应文件也被删除
cat: /var/spool/cron/root: No such file or directory

总结:删除任务的同时文件也就没有了,删除文件的同时任务也就没有了

2.3 文件方式设定定时任务

文件方式:

系统中的定时任务都放在/etc/cron.d目录下,我们查看这个目录下的文件

[root@server ~]# ll /etc/cron.d/
total 16
-rw-r--r--. 1 root root 128 Jan 28  2014 0hourly
-rw-r--r--. 1 root root 108 Mar 10  2014 raid-check
-rw-r--r--. 1 root root 235 Jan 27  2014 sysstat
-rw-r--r--. 1 root root 187 Jan 28  2014 unbound-anchor

每个文件都可以使用vim的方式打开:

[root@server ~]# vim /etc/cron.d/sysstat

# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

所以我们也可以使用文件的形式执行定时任务。

2.3.1 定时执行一个目录下的所有脚本

1)定时任务多,将定时任务放在一个目录下:

[root@server ~]# mkdir /songcron # 创建个人定时文件目录
[root@server ~]# cd /songcron/
[root@server songcron]# vim test.sh # 编写定时脚本

2)编写定时脚本

[root@server songcron]# vim test.sh # 编写定时脚本
[root@server songcron]# cat test.sh 
#!/bin/bash

touch /mnt/file{1..10} # 在/mnt/下建立10个文件

chmod +x /mnt/file* # 并且给这些文件执行权限

3)设定定时任务

[root@server ~]# crontab -e -u root

* * * * * root run-parts /songcron/
# * * * * * username + action 动作较少时直接写用户名字和动作

4)查看定时任务

[root@server ~]# crontab -e -u root
no crontab for root - using an empty one
crontab: installing new crontab
[root@server ~]# crontab -l -u root
* * * * * root run-parts /songcron/

2.3.2 文件方式设定

1)在目录/etc/cron.d下建立自己的定时任务文件:

[root@server ~]# touch /etc/cron.d/filetest

2)向文件中写定时任务:

[root@server ~]# vim /etc/cron.d/filetest
[root@server ~]# cat /etc/cron.d/filetest
* * * * * root touch /mnt/filesong{1..5}

# * * * * *  username	action 动作较少时直接写用户名字和动作

2.4 crontab的黑白名单

与at一模一样不演示了。

/etc/cron.deny:系统中默认存在,在此文件中出现的用户不能执行crontab

/etc/cron.allow:系统中默认不存在,在此文件中出现的普通用户能执行crontab ,只有在名单中的用户可以,并且/etc/at.deny失效

这两个名单都不会影响/etc/cron.d/目录中定时任务的发起及执行,因为这个目录是系统级的定时任务。

3. 系统中临时文件的管理方式

临时文件具有生命周期,是生命周期结束以后会被清空

所有临时文件的清空管理都在目录:cd /usr/lib/tmpfiles.d/

在这个目录下建立自己的配置文件,来管理自己的临时文件目录:

d   /mnt/song    777 root root 8s (这个目录是没有的)
目录 目录名称   权限  所有人 所有组 生命周期 这个目录的属性

生命周期是目录下面的文件的生命周期,目录的作用是作用于文件。

1)监控自己的临时文件目录:

[root@server ~]# watch -n 1 "ls -l  /mnt;ls -l /mnt/song"
Every 1.0s: ls -l  /mnt/;ls -l /mnt/song              Sat Aug  8 05:44:40 2020

total 0
ls: cannot access /mnt/song: No such file or directory

2) 建立自己的配置文件:

[root@server ~]# cd /usr/lib/tmpfiles.d/
[root@server tmpfiles.d]# vim filesong.conf #编辑自己的临时文件目录
[root@server tmpfiles.d]# cat filesong.conf
d 	/mnt/song	777	root	root	60s
目录 目录名称   权限  所有人 所有组 生命周期

3)systemd-tmpfiles --create /usr/lib/tmpfiles.d/* 自动建立/mnt/song

[root@server ~]# systemd-tmpfiles --create /usr/lib/tmpfiles.d/*

# watch中看到song目录出现
Every 1.0s: ls -l  /mnt/;ls -l /mnt/song              Sat Aug  8 05:45:55 2020

total 0
drwxrwxrwx 2 root root 6 Aug  8 05:45 song
total 0

4)临时目录下建立几个临时文件

[root@server ~]# touch /mnt/song/test{1..3}

total 0
drwxrwxrwx 2 root root 42 Aug  8 05:47 song
total 0
-rw-r--r-- 1 root root 0 Aug  8 05:47 test1 # 临时文件已经存在
-rw-r--r-- 1 root root 0 Aug  8 05:47 test2
-rw-r--r-- 1 root root 0 Aug  8 05:47 test3

4)按照周期清空临时目录下的临时文件

[root@server ~]# systemd-tmpfiles --clean /usr/lib/tmpfiles.d/*

Every 1.0s: ls -l  /mnt/;ls -l /mnt/song            Sat Aug  8 05:48:55 2020

total 0
drwxrwxrwx 2 root root 6 Aug  8 05:47 song
total 0

当没有执行clean时,临时文件周期到了也不会自动消失。

clean以后,目录下的文件的生命周期到了以后,才会被清除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值