我们可以通过一些设置。来让电脑定时提醒我们该做什么事了。或者我们提前设置好,告诉电脑你几点做什么几点做什么,这种我们就叫它定时任务。而遇到一些需要执行的事情或任务。我们也可以通过命令来告诉电脑一会临时把这个工作给做一下
总结:在我们LINUX中,我们可以通过crontab和at这两个东西来实现这些功能的
计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据
计划任务的安排方式分两种:
一种是定时性的,也就是例行。就是每隔一定的周期就要重复来做这个事情
一种是突发性的,就是这次做完了这个事,就没有下一次了,临时决定,只执行一次的任务
at和crontab这两个命令:
at:它是一个可以处理仅执行一次就结束的指令
crontab:它是会把你指定的工作或任务,比如:脚本等,按照你设定的周期一直循环执行下去
1.at 一次性计划任务
at 18:55 设置18点55做一次性任务
如touch nimei 保存是 ctel+d 查询atq
删除是atrm 1 (1就是第一个任务)
at语法格式:at 时间
1. 下载at程序
[root@ken ~]# yum install at -y
2. 启动atd服务
[root@ken ~]# systemctl restart atd
[root@ken ~]# ps aux | grep atd
root 1166 0.0 0.1 25904 944 ? Ss 17:52 0:00 /usr/sbin/at -f
root 1168 0.0 0.1 112704 956 pts/0 S+ 17:52 0:00 grep --color=auto atd
3. 设置at计划任务
[root@ken ~]# at 10:00 #如果是上午时间,后面加上am,比如9:20am
at> touch /tmp/test1 #输入你要执行的命令
at> <EOT> #按ctrl+d保存
job 1 at Fri Mar 1 10:00:00 2019
[root@ken ~]# at -l #查看计划任务
1 Fri Mar 1 10:00:00 2019 a root
[root@ken ~]# atq #查看计划任务
1 Fri Mar 1 10:00:00 2019 a root
4. 删除计划任务atrm
[root@ken ~]# at -l #第一步查看计划任务,获取前面编号
1 Fri Mar 1 10:00:00 2019 a root
[root@ken ~]# atrm 1 #删除计划任务加上编号
[root@ken ~]# at -l #再次查看计划任务发现已经删除
5. at计划任务的特殊写法
[root@ken ~]# at 20:00 2018-10-1 在某天
[root@ken ~]# at now +10min 在 10分钟后执行
[root@ken ~]# at 17:00 tomorrow 明天下午5点执行
[root@ken ~]# at 6:00 pm +3 days 在3天以后的下午6点执行
2.crontabs 定时任务
crontab定时任务的使用(工作必用)
接收一台服务器必须要看一下计划任务
编写任务一定要写绝对路径!!!
语法:#crontab -u -e
常用选项:
-l:list,列出指定用户的计划任务列表
-e:edit,编辑指定用户的计划任务列表
-u:user,指定的用户名,如果不指定,则表示当前用户
-r:remove,删除指定用户的计划任务列表
1. 查看计划任务
[root@ken ~]# crontab -l no crontab for root
2. 编写计划任务
计划任务的规则语法格式,以行为单位,一行为一个计划:
设置的格式:分 时 日 月 周 需要执行的命令的绝对路径 需要执行的命令
执行的命令建议写成绝对路径的格式!
例如:如果想要每天的0点0分执行reboot指令,则可以写成
0 0 * * * reboot
取值范围(常识):
分:0~59
时:0~23
日:1~31
月:1~12
周:0~7,0和7表示星期天
四个符号:
*:表示取值范围中的每一个数字
-:做连续区间表达式的,要想表示1~7,则可以写成:1-7
/:表示每多少个,例如:想每10分钟一次,则可以在分的位置写:*/10
,:表示多个取值,比如想在1点,2点6点执行,则可以在时的位置写:1,2,6
问题1:每月1、10、22日的4:45重启network服务
45 4 1,10,22 * * systemctl restart network (每月,周没有制定)
先进入 编辑器: crontab -e
* * * * *
分 时 日 月 周
45 4 1,10,22 * * /usr/bin/systemctl restarl network (命令是重启网卡)
查看systemctl绝对路径:which systemctl
复制粘贴:[root@king ~]# which systemctl
/usr/bin/systemctl
删除任务: crontab -r 查看任务是:crontab -l
问题2:每周六、周日的1:10重启network服务
10 1 * * 6,7 systemctl restart network (日、月没有指定)
问题3:每天18:00至23:00之间每隔30分钟重启network服务
*/30 18-23 * * * systemctl restart network ( 日 月 周 没有指定)
问题4:每隔两天的上午8点到11点的第3和第15分钟执行一次重启
3,15 8-11 */2 * * reboot (月和周没有指定)
给ken用户设置定时任务
crontab -e 给root 编写任务
find / -name "root" 查看root进入路径
cd /var/spool/cron 进入到cron根目录 (定时任务的根目录)
cat root 查看 root 的定时任务
45 4 1,10,22 * * /usr/bin/systemctl restarl network
useradd ken 创建ken用户
crontab -u ken -e 进入ken用户的定时设置编辑器
cat ken 查看ken的定时任务
监控一个
touch /tmp/test 在tmp/ 创建一个test文件夹
ls -ld /tmp/test 查看一个文件夹是否存在
which echo 查看一下 echo的绝对路径
crontab -e 打开文件编辑
* * * * * /usr/bin/echo "123">> /tmp/test 每分钟写入一个123到test文件夹
tail -f /tmp/test 监控 test 文件
1-20 * * * * /usr/bin/echo "123">> /tmp/test 没1-20分钟写一次123到test
创建以时间命名的文件:touch `date "+%F"`
每天晚上1点钟,执行一次备份,备份ken下的文件,文件名要以文件名为年月日
crontab -e 打开文件编辑
0 1 * * * /usr/bin/tar czf `touch $(date "+\%F")` /ken
在croutab 里面%有特殊含义 必须加\ 进行转译
0 秒一定要注意加 ,不加的话就成了1点钟每分钟进行备份了(不加每分钟会备份60次的)