명령을 대체하기 위해 시스템 단위 파일을 생성하려고 합니다.
RAILS_ENV=development bundle exec rails resque:start_workers[2]
작업자가 기계를 시작할 때 시작할 수 있도록 합니다. 내가 만든 파일은 다음과 같습니다.
[Unit]
Description=background workers
After=httpd.service solr.service
[Service]
Environment=RAILS_ENV=development
ExecStart=/usr/local/bin/bundle exec rails resque:restart_workers[2]
User=deploy
WorkingDirectory=/opt/wonda/current
Environment=rvm_bin_path=/usr/local/rvm/bin
Environment=GEM_HOME=/usr/local/rvm/gems/ruby-2.5.1
Environment=SHELL=/bin/bash
Environment=IRBRC=/usr/local/rvm/rubies/ruby-2.5.1/.irbrc
Environment=MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-2.5.1
Environment=LD_LIBRARY_PATH=/opt/rh/rh-php71/root/usr/lib64
Environment=PATH=/usr/local/rvm/gems/ruby-2.5.1/bin:/usr/local/rvm/gems/ruby-2.5.1@global/bin:/usr/local/rvm/rubies/ruby-2.5.1/bin:/usr/local/rvm/bin:/opt/rh/rh-php71/root/usr/bin:/opt/rh/rh-php71/root/usr/sbin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/sbin:/usr/local/sbin:/opt/puppetlabs/bin
Environment=GEM_PATH=/usr/local/rvm/gems/ruby-2.5.1:/usr/local/rvm/gems/ruby-2.5.1@global
Environment=DBUSER=wonda
Environment=DBPASS=***************
[Install]
WantedBy=multi-user.target
실행하면 시스템이 작업자를 시작하려고 시도하고 심지어 pid를 제공하지만 실행 중인 것으로 표시되지 않습니다. 여기에 로깅을 추가했지만 출력이 없습니다.
누구든지 내가 뭘 잘못하고 있는지 말해 줄 수 있나요?
답변1
사용하고 있는 것 같지만 rvm
수동으로 많은 것을 설정해야 합니다.rvm-exec
이런 목적으로 만들어진 것 같습니다. 터미널에서 작업 할 수 있다면 rvm-exec
서비스로 전환할 때 실수할 확률이 줄어들겠죠...
<나머지 문제 확인>
ExecStart=/usr/local/bin/bundle exec rails resque:restart_workers[2]
그럼 그것은 어디서 나온 걸까요 resque:restart_workers
?
이는 잘못된 준비 프로토콜을 사용하는 전형적인 문제처럼 들립니다. systemd
모든 프로세스가 종료되면 놀랄 것입니다 .아이디어주요 프로세스입니다. 포크하고 종료하면 됩니다.
가능하다면 systemd를 사용하여 실행하는 명령은 다음과 같아야 합니다.아니요"백그라운드 프로세스"로 포크합니다. 예를 들어, 터미널에서 이를 실행하는 경우 포그라운드에서 실행되는 명령이 필요합니다. 이는 암시적 기본 유형과 [service]
잘 작동 합니다 Type=simple
. 설정이 Type=exec
더 나은 오류 보고를 제공하지만 마음에 들지 않을 이유가 없습니다 :-).
할 수 없는 경우 - 또는 서비스가 언제 시작되는지 정확히 알아야 하며바르게Ready 프로토콜을 구현 Type=forking
하지만 그보다 더 좋은 것은 없습니다 Type=forking
. .