如何一次运行一项作业,但每小时运行所有作业?

如何一次运行一项作业,但每小时运行所有作业?

我有以下一组命令:

docker exec -u www-data bin/console api:execute --object=Account;
docker exec -u www-data bin/console api:execute --object=AgreementType;
docker exec -u www-data bin/console api:execute --object=CFProgramLevel;
docker exec -u www-data bin/console api:execute --object=Product;
docker exec -u www-data bin/console api:execute --object=Customer;
docker exec -u www-data bin/console api:execute --object=Distributor;

因为上面列出的命令是一个序列,所以它们必须按照它们出现的顺序执行。

我需要实现什么目标?

  • 一次只运行一项作业
  • 尊重顺序,这意味着例如:Account必须先运行AgreementTypeAgreementType必须先运行CFProgramLevel,等等
  • 每小时运行所有序列

我正在考虑使用 cronjobs 但我不知道如何实现这一点。有人能给我一些答案吗?

答案1

将命令放入脚本中并使用 cron 安排脚本:

剧本runstuff.sh

#!/bin/sh

docker exec -u www-data bin/console api:execute --object=Account
docker exec -u www-data bin/console api:execute --object=AgreementType
docker exec -u www-data bin/console api:execute --object=CFProgramLevel
docker exec -u www-data bin/console api:execute --object=Product
docker exec -u www-data bin/console api:execute --object=Customer
docker exec -u www-data bin/console api:execute --object=Distributor

crontab:

0 * * * * /path/to/runstuff.sh

或者,

@hourly /path/to/runstuff.sh

如果你的 cron 理解@hourly(检查man 5 crontab)。

这允许您更改脚本(如果需要),而无需编辑现有的 cronjob。它还保证 Docker 调用以正确的顺序执行,并将作业的所有处理收集到一个位置(脚本)。

答案2

您可以每小时启动一次作业,并在启动时按照您选择的顺序组合所有脚本

为此,您需要在 0 分钟、每小时、每天、每月、每周的每一天执行该工作,这意味着,在 crontab 语法中:

0 * * * * docker exec -u www-data bin/console api:execute --object=Account;docker exec -u www-data bin/console api:execute --object=AgreementType;docker exec -u www-data bin/console api:execute --object=CFProgramLevel;docker exec -u www-data bin/console api:execute --object=Product;docker exec -u www-data bin/console api:execute --object=Customer;docker exec -u www-data bin/console api:execute --object=Distributor;

因此,您需要在 crontab 表中输入上面的代码,只需crontab -e在终端中输入,然后复制上面的代码

相关内容