计划任务:①一次性计划任务 ②长期性计划任务
一、使用at添加、查看、删除一次性计划任务
[root@michael ~]# at 23:50
at> systemctl restart httpd
at> <EOT> 此处请同时按下Ctrl+d来结束编写计划任务
job 2 at 2020-06-25 23:50
[root@michael ~]# at -l
2 2020-06-25 23:50 a root
[root@michael ~]# echo "systemctl restart httpd" | at 23:50
job 3 at 2020-06-25 23:50
[root@michael ~]# at -l
2 2020-06-25 23:50 a root
3 2020-06-25 23:50 a root
[root@michael ~]# atrm 2
[root@michael ~]# at -l
3 2020-06-25 23:50 a root
二、使用crontab
linux的定时任务服务crond (crontab)服务。
crond
服务默认情况(每分钟)会检查系统中是否有需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务。
crond
是一个定时任务守护进程。
crontab
是用户用来设置定时任务规则的命令。
[root@localhost ~]# chkconfig --list | grep crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]# chkconfig --list atd
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
为什么需要定时任务?
服务器:7*小时提供服务。
重要数据:1天备份一次,5份以上。
服务器上的数据一般最低1天备份一次,每分钟(实时备份)增量备份。半夜备份(每天半夜起床备份,备份一次5小时,呵呵呵)。
秒级任务:
1)crond自身无能为力。
2)自己写守护进程shell循环。
3)Quartz也可实现秒级任务。
#!/bin/bash
# miao.sh 每5秒执行一次echo
while true
do
echo "你好世界!" >> /tmp/self.log
sleep 5
done
[root@localhost ~]# vim miao.sh
[root@localhost ~]# sh miao.sh &
[1] 2113
[root@localhost ~]# ps -ef | grep miao
root 2113 1995 89 01:23 pts/0 00:00:11 sh miao.sh
root 2115 1995 0 01:23 pts/0 00:00:00 grep miao
[root@localhost ~]# /etc/init.d/sshd status
openssh-daemon (pid 1753) is running...
[root@localhost ~]# netstat -lntup | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1753/sshd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1991/sshd
tcp 0 0 :::22 :::* LISTEN 1753/sshd
tcp 0 0 ::1:6010 :::* LISTEN 1991/sshd
常用方法
▪ 创建crontab文件
格式:“分 时 日 月 星期 命令”,如果某些字段没有设置,则需要使用 * 来占位, 多个时间段用逗号 “,” 分割。
分 | 时 | 日 | 月 | 星期 | 命令 |
---|---|---|---|---|---|
33 | 13 | 26 | 11 | * | commond |
字段 | 作用 |
---|---|
分 | 取值为 0~59 的整数 |
时 | 取值为 0~23 的整数 |
日 | 取值为 1~31 的整数 |
月 | 取值为 1~12 的整数 |
星期 | 取值为 0~7 的任意整数,其中 0,7 均为星期日 |
命令 | 要执行的命令或脚本 |
▪ -l
列出crontab文件内容(重要)
▪ -e
编辑crontab文件内容(重要)
▪ -r
删除crontab文件内容
▪ -i
提示确认
▪ -u
指定使用的用户执行任务,编辑他人的计划任务.
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
使用crontab -e编辑,实际上编辑了`/var/spool/cron/用户名` 的一个文件内容
[root@localhost ~]# cat /var/spool/cron/root
# test
注:
[root@localhost ~]# crontab -e === vim //var/spool/cron/root
[root@localhost ~]# crontab -l === cat //var/spool/cron/root
使用者权限及定时任务文件
文件 | 说明 |
---|---|
/etc/cron.deny | 该文件中所列用户不允许使用crontab命令 |
/etc/cron.allow | 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny |
/var/spool/cron/xxx | 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名。 |
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
# 这是第一个crond测试: 每周二、四、六的凌晨3点15分,将目录/home/michael进行打包压缩处理
15 3 * * 2,4,6 /usr/bin/tar -czvf backup.tar.gz /home/michael
注:
逗号( , )表示多个时间段(例“8,9,12”表示8月、9月和12月)。
减号( - )表示一段连续的时间周期(例字段“日”的取值为“12-15”,则表示每月的12~15日)。
除号( / )表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
在crond服务中每行命令语句是一条完整计划任务。
所有命令一定要用绝对路径的方式书写。(whereis rm)
[root@localhost ~]# yum install crontabs
[root@localhost ~]# service crond start
[root@localhost ~]# service crond restart
注:
在crond服务的配置中,可以#号开头写上注释信息,如:功能介绍、需求介绍、作者等重要信息。
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。