터미널에서 이 명령을 실행하면 정상적으로 작동합니다.
bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb
ExecStart
하지만 시스템 서비스 단위 파일 에 넣으면 다음과 같습니다 .
[Unit]
Description=Puma Application HTTP Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/www/html/mysite
ExecStart=bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
오류가 발생합니다.
실행 파일 경로가 절대 경로가 아닙니다: Bundle exec /home/ubuntu/.rbenv/sh
명령이 "bundle exec" 대신 절대 경로로 시작되어야 한다고 불평하는 것 같습니다. 그래서 나는 이것을 시도합니다 :
ExecStart=/bin/bash -lc 'bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb'
이제 systemctl daemon-reload 및 systemctl start puma-mysite를 실행하면 다음 오류가 발생합니다.
Jan 03 00:07:53 ip-10-0-1-133 systemd[1]: puma-mysite.service: 시작 요청이 너무 빠르게 반복되었습니다.
1월 3일 00:07:53 ip-10-0-1-133 systemd[1]: puma-mysite.service: '종료 코드'로 인해 실패했습니다.
Jan 03 00:07:53 ip-10-0-1-133 systemd[1]: Puma 애플리케이션 HTTP 서버를 시작할 수 없습니다.
명령이 SystemD 외부에서 작동하므로 이는 SystemD 문제인 것 같습니다.
답변1
또한 번들 명령에 절대 경로를 제공하여 작동하도록 했습니다.
ExecStart=/home/ubuntu/.rbenv/shims/bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb
답변2
비슷한 문제에 대한 해결책을 찾다가 이것을 발견했습니다.
또 다른 포럼에서는 이를 해결책으로 제안했습니다.
[Service]
ExecStartPre=-/bin/sleep 5
EnvironmentFile=/etc/default/bind9
https://askubuntu.com/questions/711535/delay-startup-service https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
반품
여기에서 사용 가능한 솔루션은 다음과 같습니다.
ExecStartPost=/bin/sleep 30
그리고
[Timer]
OnActiveSec=5sec
AccuracySec=1s
[Install]
WantedBy=timers.target
https://askubuntu.com/questions/1144764/sleep-not-working-in-service
[service]
TimeoutSec=infinity