定时任务与计划任务

定时任务
定时执行我们预先设置的指令
 
定时任务:
一次性计划任务
周期性计划任务
 
一次性计划任务:执行单个任务之后就会自动退出
1. at
需要下载
 
第一步:下载at一次性计划任务
[root@ken2 ~]# yum install at -y
 
第二步:启动atd服务并设置为开机自启
[root@ken2 ~]# systemctl restart atd
[root@ken2 ~]# systemctl enable atd
 
常用选项:
-l 列出at一次性计划任务
-r 删除一次性计划任务
-d 删除一次性计划任务
-c 查看计划任务详情
 
atq  列出at一次性计划任务
atrm 删除一次性计划任务
 
例子1:在14:41分在/tmp目录下创建test文件
 
第一步:设置计划任务
[root@ken2 ~]# at 14:41   #at使用格式at 时间
at> touch /tmp/testat     #CMD1
at> mkdir /tmp/test       #CMD2
at> <EOT>                 #按住ctrl d
job 1 at Mon Jul 15 14:41:00 2019
 
第二步:查看at计划任务
方法一:
[root@ken2 ~]# at -l
1Mon Jul 15 14:41:00 2019 a root
 
方法二:
[root@ken2 ~]# atq
1Mon Jul 15 14:41:00 2019 a root
 
 
第三步:再次查看计划任务
[root@ken2 ~]# atq     #一次性计划任务执行成功之后就会退出
[root@ken2 ~]# ls /tmp  #计划任务已经生效
testat
 
怎么删除计划任务那?
 
[root@ken2 ~]# at 14:56
at> ls /root           
at> touch /tmp/test1
at> <EOT>
job 2 at Mon Jul 15 14:56:00 2019
[root@ken2 ~]# at 14:57
at> ls
at> <EOT>
job 3 at Mon Jul 15 14:57:00 2019
[root@ken2 ~]# at 14:58
at> whoami
at> <EOT>
job 4 at Mon Jul 15 14:58:00 2019
[root@ken2 ~]# atq
2Mon Jul 15 14:56:00 2019 a root
3Mon Jul 15 14:57:00 2019 a root
4Mon Jul 15 14:58:00 2019 a root
 
删除计划任务:
[root@ken2 ~]# atq
2Mon Jul 15 14:56:00 2019 a root
3Mon Jul 15 14:57:00 2019 a root
4Mon Jul 15 14:58:00 2019 a root
[root@ken2 ~]# atrm 2
[root@ken2 ~]# atq
3Mon Jul 15 14:57:00 2019 a root
4Mon Jul 15 14:58:00 2019 a root
 
查看计划命令详情:
[root@ken2 ~]# at -c 5
 
[root@ken2 ~]# at now +10minute
 
周期性计划任务
 
定期周期性的执行预先设定的指令
 
crond服务实现了周期性计划任务,需要确保crond服务正在运行,一般系统已经默认开启自启
 
第一步:查看crond是否正在运行:
[root@ken2 ~]# ps aux | grep crond
root        734  0.0  0.0 126284   408 ?        Ss   14:31   0:00 /usr/sbin/crond -n
 
第二步:如果系统当中没有周期性计划任务:
yum install cronie -y
 
第三步:启动计划任务:
systemctl restart crond
 
第四步:查看crond生成文件
[root@ken2 ~]# rpm -ql cronie
 
crond主文件
 
[root@ken2 ~]# vim /etc/crontab 
 
SHELL=/bin/bash   #指定shell解释器
PATH=/sbin:/bin:/usr/sbin:/usr/bin  #指定命令在哪些路径下查找,计划任务命令需要写绝对路径!
MAILTO=root  #发送邮件接收的用户/var/spool/mail/root
 
# 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
 
* 指定分钟0-59
* 执行小时0-23
* 天 1-31
* 月1-12
* 星期几 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
 
特殊符号的讲解
*  表示范围内的任意数值
-  表示一定的范围。比如分上: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
 
 
在linux系统当中编写计划任务:
 
选项:
-e编写计划任务
-r删除计划任务
-l查询计划任务
-u指定给那个用户创建计划任务
 
例子1: 15点42在/tmp下创建文件testcrond
[root@ken2 ~]# crontab -e
42 15 * * * /usr/bin/touch /tmp/testcron
 
验证:
[root@ken2 ~]# ls /tmp
test  testat  testcron
 
例子2:以时间命名文件
[root@ken2 ~]# touch `date "+%F_%T"`.txt
[root@ken2 ~]# ls
2019-07-15_15:59:37.txt
 
例子3:在计划任务当中创建以时间命名的文件,每分钟创建一个
* * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
 
注意:在计划任务当中%前面都要加一个进行转义
 
我们在写计划任务的时候其实本质就是创建了一个和用户同名的文件!
[root@ken2 ~]# cat /var/spool/cron/root 
42 15 * * * /usr/bin/touch /tmp/testcron
* * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
 
例子4:给ken用户创建计划任务
[root@ken2 ~]# crontab -e -u ken   #在给其他用户创建计划任务的时候需要使用-u选项指定用户名
[root@ken2 ~]# crontab -l -u ken   #查看的时候也是需要-u选项指定用户名
* * * * * /usr/bin/touch /tmp/testken
 
 
在该路径下创建了一个和用户名同名的文件:
[root@ken2 ~]# cat /var/spool/cron/ken 
* * * * * /usr/bin/touch /tmp/testken
 
删除计划任务:
 
1.删除所有的计划任务
[root@ken2 ~]# crontab -l
42 15 * * * /usr/bin/touch /tmp/testcron
* * * * * /usr/bin/touch /tmp/`date "+\%F_\%T"`.txt
[root@ken2 ~]# crontab -r   #使用-r选型会把所有的计划任务都删掉
[root@ken2 ~]# crontab -l
no crontab for root
 
2.删除单条计划任务
[root@ken2 ~]# crontab -l
#* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt2
* * * * * /usr/bin/touch /tmp/`date "+\%T"`.txt1
 
验证:
[root@ken2 ~]# ls /tmp
16:12:01.txt1  
 
计划任务使用管控
[root@ken2 ~]# ls /etc/cron.deny 
 
例子1:不让ken用户使用crond服务
[root@ken2 ~]# vim /etc/cron.deny 
[root@ken2 ~]# cat /etc/cron.deny
ken
 
切换至ken用户使用crontab创建计划任务被拒绝!
[ken@ken2 ~]$ crontab -e
You (ken) are not allowed to use this program (crontab)
See crontab(1) for more information
 
定时执行脚本
[root@ken2 ~]# 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@ken2 ~]# cat test.sh   #编写脚本
#!/bin/bash
echo "123" >> /root/test
[root@ken2 ~]# cp test.sh /etc/cron.hourly/  #脚本在该目录之下会每小时执行一次
[root@ken2 ~]# chmod +x /etc/cron.hourly/test.sh   #必须加执行权限
 
定时任务执行的两种方式:
1. crontab -e
2. 脚本放在相应的/etc/cron.*
 
tar压缩归档
 
c 创建压缩归档包
z 适应gzip进行压缩
v 显示压缩归档的过程
f 指定归档名
x 解压所归档包
t 列出包文件
-C 指定解压包的位置
--exclude
 
创建压缩归档包:czvf
解压缩归档包:xzvf xf
 
例子1:创建压缩归档tar包
[root@ken2 ken]# tar czvf text.tar.gz *  #对当前路径下的所有文件进行打包,包文件名为text.tar.gz
 
例子2:解压压缩归档tar包
方法一:
[root@ken2 ken1]# tar xzvf text.tar.gz 
 
方法二:
[root@ken2 ken1]# tar xf text.tar.gz 
 
例子3:查看包文件
[root@ken2 ken1]# tar tf text.tar.gz 
 
例子4:打包当前目录下的文件并以时间进行命名
[root@ken2 ken]# tar czvf `date "+%F"`.tar.gz ./*
 
例子5:每天凌晨3点钟打包一次/ken下所有的文件
0 3 * * * /usr/bin/tar czf /tmp/`date "+\%F"`.tar.gz /ken
 
例子6:解压包到指定的目录
[root@ken2 tmp]# tar xf 2019-07-15.tar.gz -C /root
 
例子7:创建tar包排除某些文件
[root@ken2 ken]# tar czvf test1.tar.gz ./* --exclude=*.tar.gz
[root@ken2 ken]# tar tf test1.tar.gz 
原文地址:https://www.cnblogs.com/biht/p/11216848.html