以 .ebextensions/ 中的以下 .config 文件为例
container_commands:
000_run_queue_daemon:
command: "nohup php artisan queue:work --daemon &"
test: "ps -ef | grep artisan | grep -v grep > /dev/null || echo 1"
Run Code Online (Sandbox Code Playgroud)
如果守护程序尚未运行,请启动队列工作器。队列工作者守护进程永远运行(按设计),因此需要作为后台进程运行。
&符号似乎没有效果,尾随 cfn-init.log 只是停在
2014-09-15 00:24:53,921 [DEBUG] Running test for command 000_run_queue_daemon
2014-09-15 00:24:53,929 [DEBUG] Test command output: 1
2014-09-15 00:24:53,929 [DEBUG] Test for command 000_run_queue_daemon passed
Run Code Online (Sandbox Code Playgroud)
然后一直如此,直到 EB 进程超时并放弃部署。
我怎样才能让它作为后台进程运行?
当我的组中的自动缩放规则触发新 EC2 实例的部署时,或者例如我更改实例大小以模拟部署节点的行为,但在应用程序准备就绪之前将其添加到负载均衡器。
部署开始,.ebextensions 中的脚本开始执行。名为 current 的文件夹是空的,因为它是第一次部署到此节点,因此访问此节点会在浏览器中显示 403 Forbidden 错误。
最终应用程序部署完成并且 ondeck 文件夹按预期移动到 current 中,此时应用程序可以工作并且 403 错误消失。
这里的问题是节点在此过程完成之前被添加到负载均衡器,因此一些流量被分配到损坏的节点。
有什么办法可以阻止这种情况发生吗?难道我做错了什么?