1.crond任务调度
1.1 命令使用
crontab [-u username] # 省略用户表表示操作当前用户的crontab
-e (编辑crontab定时任务)
-l (查询crontab任务)
-r (删除当前用户所有的crontab任务)
service crond restart (重启任务调度)
1.2 参数细节说明
5个占位符的说明(分、时、日、月、周五种)
项目 | 含义 | 范围 |
---|---|---|
第一个 “*” | 一小时当中的第几分钟 | 0-59 |
第二个 “*” | 一天当中的第几小时 | 0-23 |
第三个 “*” | 一个月当中的第几天 | 1-31 |
第四个 “*” | 一年当中的第几月 | 1-12 |
第五个 “*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
1.3 特殊符号说明
下表中的command为命令或者脚本
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个 “*” 就表示一小时中每分钟都执行一次的意思 |
, | 代表不连续的时间。比如 “0 8,12,16 * * * command” ,代表每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围。比如 “0 5 * * 1-6command ,代表周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。比如 “*/10 * * * * command” ,代表每隔10分钟执行一次 |
1.4 实例
- 每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
- 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
- 每天凌晨2点将mysql数据库testdb,备份到文件中
# 提示:备份指令为mysqldump -u root -p 密码 数据库 > /home/db.bak
0 2 * * * mysqldump -u root -p root testdb > /home/db.bak
2.at定时任务
2.1 查看服务是否安装
由于 at 命令需要其守护进程 atd 在后台为其提供服务,所以需要先保证其已经安装
下面为CentOs7的操作:
[zhangxh@zhangzzxh ~]$ systemctl list-unit-files | grep atd
atd.service enabled # 表示已安装
rpc-statd-notify.service static
rpc-statd.service static
2.2 查看服务是否运行
[zhangxh@zhangzzxh ~]$ service atd status
...
# 显示active表示正在运行
Active: active (running) since 一 2021-03-08 21:15:06 CST; 3 weeks 0 days ago
...
2.3 at命令选项
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-l | atq的别名,显示任务列表 |
-d | atrm的别名,取消一个at 任务,后面跟任务编号 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出,-c 后面接任务编号 |
-V | 显示版本信息 |
-q <队列> | 使用指定的队列 |
-f <文件> | 从指定文件读入任务而不是标准输入读入 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
2.4 at时间定义
- HH:MM 如: at 02:30 (在2点30)
- HH:MM YYYY-MM-DD 如:at 8:00 2020-01-01 (在2020年1月1日8点)
- HH:MM[am | pm] [month] [date] 如:at 8:00 Oct 1 (在10月1号的8点 )
- HHlMM[am | pm] + number [minutes | hours | days | weeks] 如:at 8:00 + 1days (在一天后的8点)
- 最常用的的一个时间:now + 时间 比如:at now + 10 minutes (在十分钟后),at now + 1 days (在一天后)
2.5 实例
# 明天17点,输出时间到指定文件
[zhangxh@zhangzzxh ~]$ at 5pm tomorrow
at> date > /root/date100.log<EOT>
# 命令输入完成后,ctrl + d 结束输入,并提示我们该任务编号为4
job 4 at Wed Mar 31 17:00:00 2021
[zhangxh@zhangzzxh ~]$ atq
4 Wed Mar 31 17:00:00 2021 a zhangxh
# 删除已经设置的任务
[zhangxh@zhangzzxh ~]$ atrm 4
3.两种任务比较
- crond 任务调度比较适合周而复始执行的工作,比如病毒扫描,数据库备份等。
- at 命令是用来执行一次性任务,比如要在二十分钟后重启,要在 2 分钟后启动一个可执行程序,或者在一天后执行一个脚本。适合应对突发性和临时性的任务。