crond指令
任务调度:是指系统在某个时间执行的特定的命令或程序(有点像闹钟)
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 的数据库的备份
基本语法:crontab [选项]
| 选项 | 说明 |
|---|---|
| -e | 编辑 crontab 定时任务 |
| -l | 查询 crontab 任务 |
| -r | 删除当前用户所有的crontab任务 |
- 设置个人任务调度,执行 crontab -e 命令然后回车
- 接着输入任务到调度文件
/1* ls -l /etc/ > /tem/to.txt**
上述命令的意思是 每小时的每分钟执行 ls -l /etc/ > /tem/to.txt 命令,这句命令的意思是 把etc目录下面的内容以列表的形式显示到终端然后将其重定向到 tem/to.txt 文件
参数细节说明
5个占位符的说明
| 占位符 | 含义 | 范围 |
|---|---|---|
| 第一个 * | 一小时当中的第几分钟 | 0-59,如果写的是*/1,代表每一分钟都执行 |
| 第二个* | 一天当中的第几小时 | 0-23 |
| 第三个* | 一个月当中的第几天 | 1-31 |
| 第四个* | 一年当中的第几月 | 1-12 |
| 第五个* | 一周当中的星期几 | 0-7(0-7都代表星期日) |
特殊符号说明
| 特殊符号 | 含义 |
|---|---|
| * | 代表任何时间。比如第一个*就代表一小时中每分钟都执行一次的意思 |
| , | 代表不连续时间。比如0 8,12,16 *命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
| - | 代表连续的时间范围,比如0 5 1-6命令,代表在周一到周六的凌晨5点0分执行命令 |
| */n | 代表每隔多久执行一次。比如 /10 *,代表每隔10分钟就执行一遍命令 |
特殊时间执行案例
| 时间 | 含义 |
|---|---|
| 45 22 * | 在22点45分执行命令 |
| 0 17 1 | 每周1的17点0分执行命令 |
| 0 5 1,15 | 每月1号和15号的凌晨5点0分执行命令 |
| 40 4 1-5 | 每天的凌晨4点,每隔10分钟执行一次命令 |
| /10 4 | 每天的凌晨4点,每隔10分钟执行一次命令 |
| 0 0 1,15 * 1 | 每月1号和15号,每周1的0点0分都会执行命令。 注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。 |
每隔一分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
/1 date>>/tmp/mydate 1
每隔一分钟,将当前日期和日历都追加到 /home/mycal 文件中
vim /home/my.sh 1
给 my.sh 写入内容 date>>/home/mycal 和cal>>/home/mycal
然后给 my.sh 增加执行权限:chmod u+x /home/my.sh
crontab -e 写入/1 /home/my.sh
每天凌晨 2:00 将 mysql 数据库 testdb,备份到文件中。
0 2 * mysqldump -u root -proot testdb > /home/db.bak 1
mysqldump -u root -p密码 数据库 > /home/db.bak
crond相关指令
- at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行
- 默认情况下,atd 守护进程每 60s 检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
- at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用 at 命令时,一定要保证 atd 进程的启动,可以使用相关指令来查看
ps -ef | grep atd [可以监测atd是否在运行]
基本语法:
- at [选项] [时间]
- Ctrl + D 结束 at 命令的输入,输出两次 | 选项 | 说明 | | —- | —- | | -m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 | | -i | atq的别名 | | -d | atrm的别名 | | -v | 显示任务将被执行的时间 | | -c | 打印任务的内容到标准输出 | | -V | 显示版本信息 | | -q<队列> | 使用指定的队列 | | -f<文件> | 从指定文件读入任务而不是从标准输入读入 | | -t<时间参数> | 以时间参数的形式提交要运行的任务 |
at时间定义
at指定时间的方法:
- 接受在当天的 hh:mm(小时,分钟)式的时间指定。假如该时间已过去,那么久放在第二天执行。例如: 04:00
- 使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午四点)等比较模糊的词语来指定时间
- 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm
- 指定命令执行的具体日期,指定格式为 month day(月 日) 或者 mm/dd/yy(月/日/年) 或者 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04::00 2023-11-23
- 使用相对计时法。指定格式为:now+count time-units,now 就是当前时间,time-units 是时间单位,这里能够是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count 是时间的数量,几天,几小时。例如: now+5minutes
- 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间
案例一
2天后的下午5点执行 /bin/ls/home
at 5pm + 2 days


案例二
atq 命令来查看系统中没有执行的工作任务
atq
案例三
明天17点钟,输出时间到指定文件内,比如 /root/data100.log
at 5pm tomorrow
案例四
删除已经设置的任务,atrm编号
atrm 2 表示将 job 队列,编号为4的job删除。
