サーバーの再起動後にサービスが開始されない

サーバーの再起動後にサービスが開始されない

私のフォルダには次のスクリプトがあります/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.shsystemctl 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 httpdsystemctl 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

関連情報