amazon-web-services - 在新的 Amazon Linux 2 上的 AWS Elastic Beanstalk 中创建 systemd 服务
问题描述
我目前正在尝试在 AWS Elastic Beanstalk 上创建一个工作人员,该工作人员正在从特定的 SQS 队列中提取消息(在 Symfony 信使的帮助下)。我不想为此任务使用专用的工作实例。经过一番研究,我发现 systemd 可以在这里提供帮助,它在新的 Amazon Linux 2 实例上默认启用。
但是,我无法创建正在运行的 systemd 服务。这是我的 .ebextensions/03_workers.config 文件:
files:
/etc/systemd/system/my_worker.service:
mode: "000755"
owner: root
group: root
content: |
[Unit]
Description=My worker
[Service]
User=nginx
Group=nginx
Restart=always
ExecStart=/usr/bin/nohup /usr/bin/php /var/app/current/bin/console messenger:consume integration_incoming --time-limit=60
[Install]
WantedBy=multi-user.target
services:
systemd:
my_worker:
enabled: "true"
ensureRunning: "true"
如果我正在运行此命令,我将看不到我的服务正在运行:
systemctl | grep my_worker
我究竟做错了什么?:)
解决方案
systemd
服务中不支持。唯一正确的是sysvinit
:
services:
sysvinit:
my_worker:
enabled: "true"
ensureRunning: "true"
但我认为它甚至不会起作用,因为这是针对 Amazon Linux 1,而不是针对 Amazon Linux 2。
在 Amazon Linux 2 中,您甚至不应该使用太多 .ebextensions
. AWS文档特别写道:
在 Amazon Linux 2 平台上,我们强烈建议您使用 Buildfile,而不是在 .ebextensions 配置文件中提供文件和命令。Procfile 和平台挂钩尽可能在实例供应期间在您的环境实例上配置和运行自定义代码。
因此,您应该考虑使用Procfile,它基本上可以实现您想要实现的目标:
将 Procfile 用于不应退出的长时间运行的应用程序进程。Elastic Beanstalk 期望从 Procfile运行的进程连续运行。Elastic Beanstalk 监控这些进程并重新启动任何终止的进程。对于短期运行的进程,请使用 Buildfile。
选择
由于您已经为 . 创建了一个单元文件/etc/systemd/system/my_worker.service
,您systemd
可以自己创建它。enable
start
对于这个container_commands.ebextensions
可以使用。例如:
container_commands:
10_enable_worker:
command: systemctl enable worker.service
20_start_worker:
command: systemctl start worker.service
推荐阅读
- jquery - JQuery MultiSelect下拉列表不显示文本
- c - 可以使用`_mm256_movemask_ps`代替未定义的`_mm256_movemask_epi32`吗?
- vue.js - Vuetify 设置从右到左的文本
- tensorflow - ValueError: ('检查模型目标时出错:预期没有数据,但得到了
- google-apps-script - 如何使用 `ScriptApp.getService().getUrl()` 在电子表格中正确显示“当前 Web 应用程序 URL”?
- r - $operator 和 atomic vector - 将我的 data.frame 代码放在哪里
- flutter - 被 Cubit Bloc 弄糊涂了,工作正常,但现在不行
- python - 使用 az cli 解密 Azure Key Vault 密码
- r - 在 dplyr 中将选定列一次转换为 R 中的整数
- javascript - 什么结构能让项目一目了然地知道什么需要单元测试,什么不需要?