我使用 systemd 创建了这个 Laravel 配置。我在理解一切和测试一切方面都遇到了一些困难。
理论上,如果“queue”和“schedule”进程同时运行,会出现错误,因为两者同时使用“artisan”程序?
或者 nohup 程序将同时运行两个进程并且不取消任何进程?
现在看来这个配置并不冲突。
文件.ebextensions/01_files.config
files:
"/etc/systemd/system/[email protected]":
mode: "000644"
owner: root
group: root
content: |
[Unit]
Description=Laravel %i worker
After=network.target
[Service]
User=webapp
Group=webapp
EnvironmentFile=/opt/elasticbeanstalk/deployment/env
WorkingDirectory=/var/app/current/
ExecStart=/usr/bin/nohup /usr/bin/php artisan %i:work
Restart=on-failure
文件.ebextensions/02_commands.config
commands:
01_setvars:
command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local
02_reload_daemon:
command: systemctl daemon-reload
ignoreErrors: true
packages:
yum:
jq: []
container_commands:
01_laravel_worker_queue:
command: systemctl enable [email protected] && systemctl restart laravel_worker@queue
leader_only: true
02_laravel_worker_schedule:
command: systemctl enable [email protected] && systemctl restart laravel_worker@schedule
leader_only: true
答案1
就 和 而言systemd
,nohup
不是artisan
程序,而是程序 的参数/usr/bin/php
。
nohup
不关心任何其他程序或进程。如果您愿意,您没有理由无法启动同一程序的多个实例。
运行同一程序的多个实例(可以选择使用不同的参数)正是像您这样的 systemd 服务模板的[email protected]
设计目的。
但是,我不明白作为 systemd 服务nohup
启动时使用的原因。/usr/bin/php artisan ...
由于它被配置为系统服务(而不是用户服务),systemd 将负责完全独立于您的会话启动它,因此当您注销时它不会收到 SIGHUP 的危险。
由于您没有在服务模板中指定任何StandardOutput=
或StandardError=
选项,因此两个实例的标准输出和标准错误输出将转到 中配置的默认输出位置systemd-system.conf
,或者如果不存在,则转到工厂默认目标StandardOutput=journal
和StandardError=journal
。因此,标准输出将不是终端,因此nohup
可能不会按照您的预期php
将 的输出重定向到。/var/app/current/nohup.out
因此,无论有没有nohup
,输出和任何错误都应该记录到日志中,可以分别使用或进行查看。journalctl -u [email protected]
journalctl -u [email protected]