서버를 다시 시작한 후 서비스가 시작되지 않습니다

서버를 다시 시작한 후 서비스가 시작되지 않습니다

내 폴더에 다음 스크립트가 있습니다 /etc/systemd/system/.

# Start the ruby on rails app on boot
[Unit]
Description=Start Ruby Online Ordering Application

[Service]
Type=simple
RemainAfterExit=yes
Username=root
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/home/deviant/www/run.sh
TimeoutSec=300

[Install]
WantedBy=multi-user.target

허가를 받아-rw-r--r-- 1 root root

이것실행 sh스크립트에는 다음이 포함됩니다.

#!/bin/sh
service httpd stop
rails s -p 80 -d

허가를 받아-rwxrwxr-x 1 root root

즉, 서버를 다시 시작할 때 Ruby 애플리케이션을 시작해야 하지만 작동하지 않는 것 같습니다.

시스템 오류 로그는 어디서 볼 수 있나요? 서버를 다시 시작할 때 시작되지 않는 원인은 무엇입니까?

스크립트를 다음과 같이 변경해 보았습니다.

[Service]
Type=oneshot
RemainAfterExit=yes
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/home/deviant/www/run.sh
TimeoutSec=300

이제 계속하겠습니다systemctl enable....

'서비스' 섹션의 알 수 없는 lvalue 'username'에 'No' 이외의 'restart=' 설정이 있습니다. 이는 'type=disposable' 서비스에 허용되지 않습니다. 거부하다.

그게 무슨 뜻인지도 잘 모르겠어요. 무슨 뜻이에요?

답변1

Ruby 애플리케이션이 httpd이 서비스와 충돌하는 경우 서비스를 중지하기 위해 서비스를 계속 실행해야 하는 이유를 모르겠습니다 run.sh. systemctl disable httpd한 번만 실행하면 시작되지도 않습니다.

이제 콘텐츠를 완전히 제거하고 run.sh서비스 파일을 사용 및 생성할 수 있습니다. 이 옵션을 제거한 것은 의도적인 것이며 와 일치합니다.Type=simpleExecStart=/full/path/to/rails s -p 80-dType=simple

안전을 위해 서비스가 동시에 실행될 수 없음을 Conflicts=httpd.service알리는 내용을 추가할 수 있습니다.systemdhttpd

그래서 당신의 /etc/systemd/system/my-ruby-application.service모습은 다음과 같아야합니다 :

# Start the ruby on rails app on boot
[Unit]
Description=Start Ruby Online Ordering Application
Conflicts=httpd.service

[Service]
Type=simple
Username=root
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/some/full/path/rails s -p 80
TimeoutSec=300

[Install]
WantedBy=multi-user.target

systemd어떤 이유로 서비스가 실패하는 경우 서비스를 다시 시작 하려면 Restart=요구 사항에 맞는 옵션을 추가하세요( 의 표 2 참조 man systemd.service). 이렇게 하는 경우 RestartSec=<sensible restart delay>0.1초 간격(기본값)으로 반복되는 다시 시작 시도로 인해 서버가 정체되는 것을 방지하기 위해 a를 추가하는 것이 좋습니다. 다시 시작할 때마다 서비스가 계속 실패하는 경우 해당 서버를 편집했기 때문일 수 있습니다. 구성 파일을 편집하여 실수로 실수를 범했습니다.

my-ruby-application.service파일을 편집한 후에 systemctl daemon-reloadsystemctl disable httpd, systemctl stop httpd아직 수행하지 않은 경우 , systemctl enable my-ruby-application마지막으로 을 실행해야 합니다 systemctl start my-ruby-application.

답변2

systemctl 데몬을 다시 로드하셨나요?

systemctl daemon-reload  
systemctl enable service_name

Centos 배포판이 부팅 로그를 유지한다는 것을 알고 있습니다.

cat /var/log/boot.log

관련 정보