내 폴더에 다음 스크립트가 있습니다 /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=simple
ExecStart=/full/path/to/rails s -p 80
-d
Type=simple
안전을 위해 서비스가 동시에 실행될 수 없음을 Conflicts=httpd.service
알리는 내용을 추가할 수 있습니다.systemd
httpd
그래서 당신의 /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-reload
는 systemctl 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