使用cronjob可以实现各种形式的定时任务。也可以配合shell脚本运行。
简要使用说明
首先打开
在线cronjob生成器(可以直观看到接下来多次执行时间)生成你想要的时间命令,类似于0/1 * * * * ?
,然后把你想要执行的命令附在后面,例如:
0/1 * * * * ? test.sh
然后crontab -e
,打开编辑器,向文件中添加上面这行代码,然后
service cron reload
即可。
如需执行多条命令,可以使用&&
进行链接。
时间配置实例
m h dom mon dow command
1、每小时的第5分钟执行 ls 命令
5 * * * * ls
2、每5分钟执行 ls 命令
*/5 * * * * ls
3、每天的 4:30 执行 ls 命令
30 4 * * * ls
4、每小时执行 ls 命令
0 * * * * ls
5、每天执行 ls 命令
0 0 * * * ls
6、每周执行 ls 命令
0 0 * * 0 ls
7、每年执行 ls 命令
0 0 1 1 * ls
8、每月 8号 的 7:20 执行 ls 命令
20 7 8 * * ls
9、每年的 6月28号 5:30 执行 ls 命令
30 5 28 6 * ls
10、每星期日的 6:30 执行 ls 命令
30 6 * * 0 ls
注意:0 表示星期天, 1 表示星期一,以此类推;也可以用英文来表示,sun 表示星期天,mon 表示星期一等。
11、每月 10号和20号 的 4:30 执行 ls 命令
30 4 10,20 * * ls
注意:” , “ 用来连接多个不连续的时间
12、每天 8~11点 的第 25 分钟执行 ls 命令
25 8-11 * * * ls
注意:” - “ 用来连接连续的时间
13、每个月中每隔 10天 的 5:30 执行 ls 命令
30 5 */10 * * ls
即:每月的 1、11、21、31日 在 5:30 执行一次 ls 命令
14、每天 4:30 以 root 身份执行 /etc/cron.daily 目录中的所有可执行文件
30 4 * * * root run-parts /etc/cron.daily
15、真实使用中,一般都是执行自己的可执行文件
0 * * * * cd /data/sync-data/mdd;/data/GoProjects/bin/go-elastic-index -config=mdd.toml >> mdd.log 2>&1
crontab
crontab: crontab -r /删除某个用户的cron服务/ -e 打开编辑器 -l 列出定时任务
crond: service cron start /启动服务/ service cron stop /关闭服务/ service cron restart / 重启服务/ service cron reload /重新载入配置/
命令不执行的问题
注意cronjob是没有环境变量的。所以如果使用类似于python这样的服务,需要指明可执行文件的位置,例如
/usr/bin/python3 test.py
如果不添加则不能够执行。
另外,时间配置错误也可能导致不执行。参见第二节。
最后,记得重载配置。
路径问题:在 crontab 命令中只有 “绝对路径”,不存在相对路径,故执行任何命令都需要写绝对路径。
参考
- https://www.runoob.com/w3cnote/linux-crontab-tasks.html 菜鸟教程
- https://www.jianshu.com/p/d6d8d9f7f60c 详细介绍
- https://blog.csdn.net/ciky2011/article/details/38486935 一次执行多个命令
- https://github.com/ldang264/vue-cron-generator 一个cron generator的源码
- https://blog.csdn.net/GX_1_11_real/article/details/86535942 脚本无法执行问题
- https://daimajiaoliu.com/daima/4ed236ed090041c crond cronjob 控件
- https://blog.csdn.net/weixin_34942564/article/details/113053103 实例