我有以下一组命令:
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
必须先运行AgreementType
,AgreementType
必须先运行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
在终端中输入,然后复制上面的代码