저는 systemd를 사용하여 이 Laravel 구성을 만들었습니다. 모든 것을 이해하고 모든 것을 테스트하는 데 문제가 있습니다.
이론적으로 "큐"와 "스케줄" 프로세스가 동시에 실행되면 둘 다 "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
다른 프로그램이나 프로세스에는 관심이 없습니다.원하는 경우 동일한 프로그램의 여러 인스턴스를 시작할 수 없는 이유가 없습니다.
동일한 프로그램의 여러 인스턴스(선택적으로 다른 매개변수 사용)를 실행하는 것이 바로 귀하와 같은 시스템 서비스 템플릿이 [email protected]
설계된 목적입니다.
nohup
그런데 systemd 서비스로 시작할 때 왜 사용하는지 모르겠습니다 ./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]