如何将同一时间执行的多个Cron任务合并为一行?
合并同时间Cron任务的方法
直接合并命令到同一行
对于同一时间触发的Cron任务,你可以把多个命令用**分号;**分隔,放在同一个时间字段后面。分号的作用是不管前一个命令执行成功与否,都会执行下一个命令,适合同类任务的批量执行。
以你的示例为例,原配置里有两个0 05 * * *的任务和两个50 05 * * *的任务,合并后会变成两行:
# 合并0点5分的两个任务 0 05 * * * /usr/src/app/infrastructure/my_script.sh something_from_my_script >> /var/log/logger.log 2>&1 ; /usr/src/app/infrastructure/my_script.sh something_from_my_script >> /var/log/logger.log 2>&1 # 合并5点50分的两个任务 50 05 * * * /usr/src/app/infrastructure/my_script.sh something_from_my_script >> /var/log/logger.log 2>&1 ; /usr/src/app/infrastructure/my_script.sh something_from_my_script >> /var/log/logger.log 2>&1
适合大量任务的优化方案
如果实际场景中有10-15个同类任务,直接在Cron行里堆分号会显得杂乱难维护。更推荐的做法是:
- 新建一个批量执行脚本,比如
/usr/src/app/infrastructure/batch_run.sh,把所有需要执行的命令写进去:#!/bin/bash /usr/src/app/infrastructure/my_script.sh something_from_my_script >> /var/log/logger.log 2>&1 /usr/src/app/infrastructure/my_script.sh something_from_my_script >> /var/log/logger.log 2>&1 # 继续添加其他10-13个任务命令 - 给这个脚本添加执行权限:
chmod +x /usr/src/app/infrastructure/batch_run.sh - 然后在Crontab里只需要一行调用这个脚本:
0 05 * * * /usr/src/app/infrastructure/batch_run.sh
这种方式不仅更整洁,后续修改任务也只需要编辑批量脚本,不用改动Crontab配置,降低出错概率。
内容的提问来源于stack exchange,提问作者NeonOni
相关产品推荐
相关产品推荐

