두 개의 프로그램이 동시에 실행되는 경우 이 시스템 구성에서 오류가 발생합니까?

두 개의 프로그램이 동시에 실행되는 경우 이 시스템 구성에서 오류가 발생합니까?

저는 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]

관련 정보