我目前正在尝试在AWS Elastic Beanstalk上创建一个工作程序,该工作程序从特定SQS队列中提取消息(在Symfony Messenger的帮助下)。我不想为此任务使用专用的工作程序实例。经过研究,我发现systemd可以为您提供帮助,默认情况下,新的Amazon Linux 2实例启用了systemd。
但是,我无法创建正在运行的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
它自己。
为此,可以使用in中的container_commands.ebextensions
。例如:
container_commands:
10_enable_worker:
command: systemctl enable worker.service
20_start_worker:
command: systemctl start worker.service
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句