将仅在启动时运行一次的 Elastic Beanstalk 配置命令放在哪里?

Posted

技术标签:

【中文标题】将仅在启动时运行一次的 Elastic Beanstalk 配置命令放在哪里?【英文标题】:Where to put Elastic Beanstalk config commands that are only run once on spin-up? 【发布时间】:2013-05-25 12:17:15 【问题描述】:

我知道我可以使用 commands 数组将命令放入 .ebextensions/*.config 的源代码中。然而,这些是在每个部署时执行的。如果我想在启动新实例时只执行一次配置命令怎么办?

【问题讨论】:

【参考方案1】:

可以使用test: 修饰符有条件地运行命令。您指定要完成的测试。如果测试返回 0,则运行命令,否则不运行。

如果您的配置文件中的最后一个命令涉及一个文件,并且您只想运行一次的上述命令检查该文件是否存在,那么这些命令将只运行第一次。

commands:
  01-do-always:
    command: run_my_script
  02-do-on-boot:
    command: script_to_run_once
    test: test ! -f .semaphore
  99-signal-startup-complete:
    command: touch .semaphore

在 Windows 上会是这样的

commands:
  01-do-always:
    command: run_my_script
  02-do-on-boot:
    command: script_to_run_once
    test: if exists c:\\path\\to\\semaphore.txt (exit 0) else (exit 1)
  99-signal-startup-complete:
    command: date > c:\\path\\to\\semaphore.txt

【讨论】:

如果不是在 Windows 服务器上,你会如何做同样的事情?语法有何不同?谢谢。 用 Windows 示例更新了帖子。 所以我想这适用于commands 部分,而对于container_commands,您可以改用leader-only 选项吗?还是我误解了这个问题? @djvg leader-only 仅在目标组中的 1 个实例上执行命令。这里的问题是关于在每个实例上执行一个命令,但只执行一次。 .semaphore 对我不起作用,我认为当前直接是临时部署目录,每次部署都会删除。它适用于不同的目录,我决定使用/var/elasticbeanstalk/...【参考方案2】:

在 Windows 上这应该可以工作:

commands:
  01-do-always:
    command: run_my_script
  02-do-on-boot:
    command: script_to_run_once
    test: cmd /c "if exist c:\\semaphore.txt (exit 1) else (exit 0)"
  99-signal-startup-complete:
    command: echo %date% %time% > c:\\semaphore.txt

请注意,我必须更改 Jim Flanagan 的回答中的 test 命令。

【讨论】:

以上是关于将仅在启动时运行一次的 Elastic Beanstalk 配置命令放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Elastic Beanstalk 上启动时运行一次 python 脚本

对于 iPhone - 但不是 iOS 模拟器 - UIToolbar UIBarButtonItem 将仅在长按时突出显示,而不是在点击时突出显示

启动游戏时,出现启动《星际争霸2》出现错误,请再试一次的提示

停止并启动在 EC2 和 mysql RDS 上运行 php 的 AWS Elastic Beanstalk

仅在第一次运行时接收来自 Java 的 UDP 消息

对只运行一次的程序使用 elixir 应用程序