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