linux进阶之计划任务及压缩归档
本节内容
1. at一次性计划任务(atd)
at 时间点 command
ctrl+d:保存
-l:查看计划任务
atrm:删除计划任务
atq:查看计划任务
2. crontab周期性计划任务(crond)
-l: 查看计划任务
-u:指定用户
-r:删除计划任务
-e:编辑计划任务
格式:
* * * * * command && command
分 时 日 月 周
0-59 0-23 1-31 1-12 0-6、1-7
*:表示范围内的所有
-: 表示一段范围
/:每隔多少
,:表示间隔
3. tar压缩归档
-c:创建压缩包
-v:显示过程
-z:采用gzip压缩
-f:指定文件名
-x:解压
-j:采用bzip2压缩
常用组合:
创建:czvf
解压:xzvf
计划任务
定时执行我们预先设置的指令
计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据
定时任务的安排方式:
一次性计划任务:执行单个任务之后就会自动退出
周期性计划任务:每隔一定的周期就要重复来做这个事情
一、at一次性计划任务
at语法格式:at 时间
1、需要下载at程序
第一步:下载at一次性计划任务
[root@renyz08 ~]# yum install at -y
第二步:启动atd服务并设置为开机自启
[root@renyz08 ~]# systemctl restart atd
[root@renyz08 ~]# systemctl enable atd
常用选项:
-l 列出at一次性计划任务(atq的别名)
-r 删除一次性计划任务(atrm的别名)
-d 删除一次性计划任务(atrm的别名)
-c 查看计划任务详情(cat连接命令行中列出的作业并输出到标准输出)
atq 列出at一次性计划任务(queue排队,队列)
atrm 删除一次性计划任务
2、设置at计划任务
例子1:在18:48分在/tmp目录下创建at_test文件
第一步:设置计划任务
[root@renyz08 tmp]# date
2019年 07月 15日 星期一 18:50:12 CST
[root@renyz08 tmp]# at 18:55 #at使用格式:at 时间
at> touch at_test #CMD1
at> mkdir at_test2 #CMD2
at> <EOT> #按住ctrl+D
job 3 at Mon Jul 15 18:55:00 2019
第二步:查看at计划任务
方法一:
[root@renyz08 tmp]# at -l
3 Mon Jul 15 18:55:00 2019 a root
方法二:
[root@renyz08 tmp]# atq
3 Mon Jul 15 18:55:00 2019 a root
第三步:再次查看计划任务
[root@renyz08 tmp]# atq #一次性计划任务执行成功之后就会退出
[root@renyz08 tmp]# ls #计划任务已经生效
at_test
at_test2
2、删除一次性计划任务
怎么删除计划任务?(先创建多个计划任务)
[root@renyz08 ~]# at 19:00
at> touch /tmp/at_test3
at> <EOT>
job 4 at Mon Jul 15 19:00:00 2019
[root@renyz08 ~]# at 19:01
at> touch /tmp/at_test4
at> <EOT>
job 5 at Mon Jul 15 19:01:00 2019
[root@renyz08 ~]# at 19:02
at> whoami
at> <EOT>
job 6 at Mon Jul 15 19:02:00 2019
[root@renyz08 ~]# atq
4 Mon Jul 15 19:00:00 2019 a root
5 Mon Jul 15 19:01:00 2019 a root
6 Mon Jul 15 19:02:00 2019 a root
删除一次性计划任务6
[root@renyz08 ~]# atrm 6 #格式:atrm 任务序号
[root@renyz08 ~]# atq #再次查看,6任务已删除
4 Mon Jul 15 19:00:00 2019 a root
5 Mon Jul 15 19:01:00 2019 a root
查看计划命令详情:
[root@renyz08 ~]# atq
7 Mon Jul 15 19:10:00 2019 a root
[root@renyz08 ~]# at -c 7 #选项-c可查看计划命令详情
touch at_test5 #打开后,在倒数第二行有显示计划命令的详情
3、at计划任务的特殊写法
[root@renyz08 ~]# at 20:00 2018-10-1 在某天
[root@renyz08 ~]# at now +10min 在 10分钟后执行
[root@renyz08 ~]# at 17:00 tomorrow 明天下午5点执行
[root@renyz08 ~]# at 6:00 pm +3 days 在3天以后的下午6点执行
二、crontab周期性计划任务
定期周期性的执行预先设定的指令
1、查看crond服务
crond服务实现了周期性计划任务,需要确保crond服务正在运行,一般系统已经默认开启自启
第一步:查看crond是否正在运行:
[root@renyz08 ~]# ps aux | grep crond
root 6514 0.0 0.1 126288 1640 ? Ss 03:12 0:00 /usr/sbin/crond -n
第二步:如果系统当中没有周期性计划任务:
yum install cronie -y
第三步:启动计划任务:
systemctl restart crond
第四步:查看crond生成文件
[root@renyz08 ~]# rpm -ql cronie
/etc/cron.d
/etc/cron.deny
/etc/sysconfig/crond
/usr/bin/crontab
/var/spool/cron
2、查看crond主文件:
[root@renyz08 ~]# vim /etc/crontab
SHELL=/bin/bash #指定shell解释器
PATH=/sbin:/bin:/usr/sbin:/usr/bin #指定命令在哪些路径下查找,计划任务命令需要写绝对路径!
MAILTO=root #发送邮件接收的用户/var/spool/mail/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
1* 指定分钟0-59
2* 执行小时0-23
3* 天 1-31
4* 月1-12
5* 星期几 0-6
CMD
注意:crond最小的执行的单位是分钟!
例子1:
* * * * * /usr/sbin/reboot
每天每分钟执行一次重启系统任务
例子2:凌晨三点钟执行一次系统重启任务
错误写法:
* 3 * * * /usr/sbin/reboot
注意:表示每天的三点钟开始,会执行60次系统重启
正确写法:
0 3 * * * /usr/sbin/reboot
总结:在周期性计划任务的时候要确保分钟要有数值,如果没有数值表示一个小时的60分钟之内都会执行相应的操作!
例子3:星期四的凌晨2点钟重启系统
0 2 * * 4 /usr/sbin/reboot
例子4: 4月2号下午4点钟执行一次系统重启
0 16 2 4 * /usr/sbin/reboot
注意:在写天和周的时候一定要把握好时间!
一般写天就不写周了,写周就不写天了!
例子5:星期天晚上11点钟执行一次系统重启
0 23 * * 0 /usr/sbin/reboot
3、四个符号
* 表示范围内的任意数值
- 表示一定的范围。比如分上:45-50 在45分到50分之间执行操作
/ 表示每隔多久执行操作 比如分上:*/10 表示每隔10分钟执行一次操作
, 表示指定多个时间点 比如分上:4,35,54 表示在4分,35分钟,54分钟执行操作
例子1:在每个月的4-10号之间凌晨三点钟执行一次系统重启操作
0 3 4-10 * * /usr/sbin/reboot
例子2:每天的凌晨2和3点各执行系统重启操作
0 2-3 * * * /usr/sbin/reboot
例子3:每天的凌晨2点钟,4点钟,10点钟执行一次系统重启操作
0 2,4,10 * * * /usr/sbin/reboot
例子4:凌晨2到10点每个小时重启一次系统
10 2-10 * * * /usr/sbin/reboot
4、在linux系统当中编写计划任务:
选项:
-e 编写计划任务(edit)
-r 删除计划任务(remove)
-l 查询计划任务(Displays the current crontab on standard output)
-u 指定给那个用户创建计划任务
例子1:19点42在/tmp下创建文件at_test5
[root@renyz08 ~]# crontab -e
42 19 * * * /usr/bin/touch /tmp/at_test5
验证:
[root@renyz08 ~]# ls /tmp
at_test
at_test2
at_test3
at_test4
at_test5
例子2:以时间命名文件
[root@renyz08 ~]# touch /tmp/`date "+%F_%T"`.txt
[root@renyz08 ~]# ls /tmp
2019-07-15_19:44:24.txt
例子3:在计划任务当中创建以时间命名的文件,每分钟创建一个
* * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
注意:在计划任务当中%前面都要加一个\进行转义
我们在写计划任务的时候其实本质就是创建了一个和用户同名的文件!
[root@renyz08 ~]# cat /var/spool/cron/root
42 19 * * * /usr/bin/touch /tmp/at_test5
例子4:给ren2用户创建计划任务
[root@renyz08 ~]# crontab -e -u ren2 #在给其他用户创建计划任务的时候需要使用-u选项指定用户名
[root@renyz08 ~]# crontab -l -u ren2 #查看的时候也是需要-u选项指定用户名
在该路径下创建了一个和用户名同名的文件:
[root@renyz08 ~]# cat /var/spool/cron/ren2
0 20 * * * /usr/bin/touch /tmp/at_test6
5、删除计划任务
a. 删除所有的计划任务
[root@renyz08 ~]# crontab -l
42 19 * * * /usr/bin/touch /tmp/at_test5
[root@renyz08 ~]# crontab -r #使用-r选型会把所有的计划任务都删掉
[root@renyz08 ~]# crontab -l
no crontab for root
b. 删除单条计划任务
[root@renyz08 ~]# crontab -l
#* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt1
* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt2
* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt3
* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt4
验证:
[root@renyz08 ~]# ls /tmp
20:01:02.txt2
20:01:02.txt3
20:01:02.txt4
6、计划任务使用管控
[root@renyz08 ~]# ls /etc/cron.deny(否认,拒绝)
例子1:不让ren3、ren4、ren5用户使用crond服务
[root@renyz08 ~]# vim /etc/cron.deny
[root@renyz08 ~]# cat /etc/cron.deny
ren3
ren4
ren5
切换至ken用户使用crontab创建计划任务被拒绝!
[root@renyz08 ~]# su - ren3
上一次登录:六 7月 13 11:32:37 CST 2019pts/1 上
[ren3@renyz08 ~]$ crontab -e
You (ren3) are not allowed to use this program (crontab)
See crontab(1) for more information
7、定时执行脚本
[root@renyz08 ~]# ls -ld /etc/cron.*
drwxr-xr-x. 2 root root 21 Apr 4 06:47 /etc/cron.d
drwxr-xr-x. 2 root root 42 Apr 4 06:47 /etc/cron.daily #每天执行一次
drwxr-xr-x. 2 root root 22 Jun 10 2014 /etc/cron.hourly #每小时执行一次
drwxr-xr-x. 2 root root 6 Jun 10 2014 /etc/cron.monthly #每月执行一次
drwxr-xr-x. 2 root root 6 Jun 10 2014 /etc/cron.weekly #每周执行一次
如何使用?
把脚本放到相应的目录之下,就会在相应的时间定期执行
但是需要注意的是脚本必须有执行权限
[root@renyz08 ~]# cat test.sh #编写脚本
#!/bin/bash
echo "123" >> /root/test
[root@renyz08 ~]# cp test.sh /etc/cron.hourly/ #脚本在该目录之下会每小时执行一次
[root@renyz08 ~]# chmod +x /etc/cron.hourly/test.sh #必须加执行权限
定时任务执行的两种方式:
1. crontab -e
2. 脚本放在相应的/etc/cron.*
三、tar压缩归档
定义:归档(archiving)就是将许多文件(或目录)打包成一个文件
目的:归档的目的就是方便备份、还原及文件的传输操作
功能:将多个文件(也可能包括目录,因为目录本身也是文件)放在一起存放到一个磁带或磁盘归档文件中。并且将来可以根据需要只还原归档文件中的某些指定的文件
常用选项:
c 创建压缩归档包(create)
z 使用gzip进行压缩
j 使用bzip2进行压缩(文件压缩的更小)
v 显示压缩归档的过程(verbose(冗长的,啰嗦)详细显示处理的文件)
f 指定归档名(file)
x 解压所归档包(extract提取,抽出)
t 列出包文件(list)
-C 指定解压包的位置(directory DIR转到指定的目录)
--exclude 压缩时除去部分内容(压缩时不压缩个别文件)
常用选项组合:
创建压缩归档包:czvf
解压缩归档包:xzvf xf
例子1:创建压缩归档tar包
[root@renyz08 tmp]# tar czvf at_test.tar.gz ./*或* #对当前路径下的所有文件进行打包,包文件名为text.tar.gz
例子2:解压压缩归档tar包
方法一:
[root@renyz08 tmp]# tar xzvf at_test.tar.gz
方法二:
[root@renyz08 tmp]# tar xf at_test.tar.gz
例子3:查看包文件
[root@renyz08 tmp]# tar tf at_test.tar.gz
例子4:打包当前目录下的文件并以时间进行命名
[root@renyz08 tmp]# tar czvf `date "+%f"`.tar.ga *
例子5:每天凌晨3点钟打包一次/test下所有的文件
[root@renyz08 tmp]# crontab -e
0 3 * * * /usr/bin/tar czf /tmp/`date "+\%F"`.tar.ga /test
例子6:解压包到指定的目录
[root@renyz08 test]# tar xf at_test.tar.gz -C /root
例子7:创建tar包排除某些文件
[root@renyz08 test]# tar czvf at_test.tar.gz * --exclude=test*
[root@renyz08 test]# tar tf *tar.gz