更新于:2023年12月6日
crontab-linux定时任务
目录
[toc]
文章推荐
https://onedayxyy.cn/docs/typora 《玩转Typora-永久更新地址》 QQ交流群
1、介绍
crontab
命令用于创建、编辑和管理用户的定时任务(cron jobs)。这些任务可以按照指定的时间表自动运行。
crontab是一种非常实用的时间任务调度工具,通过简单的设置,即可实现各种定时任务,非常适用于一些需要自动处理数据、批量操作等场景。
2、格式
crontab是用于设置定时任务的一种工具,每个定时任务都包含五个字段,分别为分钟、小时、日、月、星期。每个字段都有对应的取值范围,可以使用**单个取值、多个取值、递增取值**等方式进行设置。以下是几个常用的格式示例:
crontab 的格式为:分 时 日 月 星期 要运行的命令
。
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
# 分钟 小时 天 月 周
- 第1列分钟 0~59
- 第2列小时 0~23
- 第3列日 1~31
- 第4列月 1~12
- 第5列星期 0~7(0和7表示星期天)
- 第6列要运行的命令
案例汇总
##每几分钟
* * * * * command // 表示每分钟执行一次该命令
*/5 * * * * command // 表示每5分钟执行一次该命令
##每天
0 3 * * * command // 表示每天凌晨3点执行该命令
##每月
0 0 1 * * command // 表示每月1号凌晨0点0分执行该命令
##每周
0 0 * * 1 command // 表示每周一凌晨0点0分执行该命令
其中,星号(*)表示所有可能的值,斜杠(/)表示递增,逗号(,)表示多个取值,横线(-)表示取值范围。
注意:这里的command可以是linux命令或者shell脚本(要是绝对路径)。
案例1(测试成功)
san巡检脚本-2023.6.5
[root@localhost v3-2023.5.25]# crontab -e
30 8 * * * /root/Desktop/v3-2023.5.25/run.sh
[root@localhost v3-2023.5.25]# vim run.sh
#!/bin/sh
cd /root/Desktop/v3-2023.5.25
./main_Linux_20230530 &> /root/Desktop/v3-2023.5.25/output/`date +%F-%T`.log
[root@localhost v3-2023.5.25]# chmod 777 run.sh
[root@localhost v3-2023.5.25]# crontab -l
30 8 * * * /root/Desktop/v3-2023.5.25/run.sh
[root@localhost v3-2023.5.25]# ls output/
2023-06-05-11:15:32.log 2023-06-05-11:18:01.log
[root@localhost v3-2023.5.25]# ls
2023-05-25 2023_06_01 14-36-39_SAN_WarningInfo.txt check_2023-05-30 main_Linux_20230525
2023_05_25 16-21-14_SAN_WarningInfo.txt 2023-06-02 check_2023-05-31 main_Linux_20230530
2023-05-30 2023_06_02 10-06-00_SAN_WarningInfo.txt check_2023-06-01 output
2023_05_30 11-00-09_SAN_WarningInfo.txt 2023-06-05 check_2023-06-02 run.sh
2023-05-31 2023_06_05 11-16-12_SAN_WarningInfo.txt check_2023-06-05 sanInspect_Linux.zip
2023_05_31 15-38-52_SAN_WarningInfo.txt 2023_06_05 11-19-03_SAN_WarningInfo.txt config.yaml
2023-06-01 check_2023-05-25 fsmTemplates
[root@localhost v3-2023.5.25]#
案例2(测试失败)
docker命令-2023.12.5
环境
centos7.9
- 需求
我想把之前的docker.sh爬虫脚本,通过定期爬虫自己的onedayxyy.cn docusaurus知识库,从而让自己网站的algolia搜索内容更准确。
docker.sh爬虫脚本已经具备了,现在就是通过crontab实现一个定时脚本就行了。
- 配置过程
chmod 777 docker.sh
crontab -e
0 0,6,12,18 * * * /root/docker.sh >> /var/log/crontab.log 2>&1
crontab -l
- 但是,自己测试了几次没有现象啊……。。。
奇了怪了:。。。
难道是因为docker.sh原因吗。。。(好无语呀……)
[root@hexo-blog ~]# cat /root/docker.sh
#!/bin/bash
cd /root
docker run -it --env-file=.env -e "CONFIG=$(cat docsearch.json | jq -r tostring)" algolia/docsearch-scraper
我脚本这里都测试过了,还是有问题:😭
0 0,6,12,18 * * * /root/docker.sh >> /var/log/crontab.log 2>&1 无效果
0 0,6,12,18 * * * sh /root/docker.sh >> /var/log/crontab.log 2>&1 无效果
45 11 * * * cd /root;docker run -it --env-file=.env -e "CONFIG=$(cat docsearch.json | jq -r tostring)" algolia/docsearch-scraper >> /var/log/crontab-record.log 无效果
- 后面再看把。。。
3、命令
1. 列出当前用户的定时任务
crontab -l
这将列出当前用户的所有定时任务。
2. 编辑当前用户的定时任务
该命令打开当前用户的crontab配置文件,可以添加新的任务、修改和删除已有的任务。
crontab -e
3. 添加定时任务
在编辑模式下,按照以下格式添加定时任务:
# 每天凌晨1点运行 my_script.sh
0 1 * * * /path/to/my_script.sh
# 每周一早上5点运行 another_script.sh
0 5 * * 1 /path/to/another_script.sh
# 每月1号午夜执行 cleanup.sh
0 0 1 * * /path/to/cleanup.sh
这些数字和星号代表了任务执行的时间。具体格式为:分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期几(0-6,其中0是星期日)。星号表示匹配任意值。
4. 从文件导入定时任务
如果您有一个包含定时任务的文件,可以使用以下命令导入:
crontab filename
其中 filename
是包含定时任务的文件名。
5. 移除所有定时任务
crontab -r
这将删除当前用户的所有定时任务。
6. 使用系统的 crontab 文件
有时,需要编辑系统范围的 crontab
文件,而不是用户特定的文件。在这种情况下,可以使用以下命令:
sudo crontab -e
请注意,这将使用超级用户权限编辑系统范围的 crontab
文件。
以上是一些 crontab
命令的使用案例。定时任务的时间表语法相对简单,但确保理解并检查任务是否按照您的期望运行是非常重要的。
4、常见问题
1. 如何调试crontab任务?
在crontab的命令行中,无法像普通命令一样直接输出结果。因此,如果需要调试任务,可以在任务中将输出重定向到指定的文件。
* * * * * command > /tmp/command.log 2>&1
其中,2>&1 表示将错误信息输出到标准输出中。
2. crontab任务执行失败怎么办?
crontab任务执行失败的原因可能有很多,比如command命令路径不对,权限不够等。为了方便排查问题,可以在crontab命令中添加日志记录功能。
* * * * * command >> /var/log/crontab.log 2>&1
将日志记录到指定的文件后,就可以通过查看日志文件来定位问题并修复了。
3. crontab任务怎么调整执行次数?
crontab中的任务只会按照设定的时间执行一次,如果需要在某一段时间内执行多次,可以使用while循环。
* * * * * while true; do command; sleep 30; done
命令中的 while true 表示一直循环执行,每次执行后等待30秒再继续循环。
参考
https://www.python100.com/html/F0BY44BU18A1.html#title-4
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 个人博客站点
🍀 语雀
https://www.yuque.com/xyy-onlyone
🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 知乎
https://www.zhihu.com/people/foryouone
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!