私は私のsystemdサービスが起動時に起動しない理由、または関連するRubyスクリプトが失敗するたびに(私の意図が何であるかのように)把握しようとして本当に夢中になっています。 EC2 Ubuntuインスタンスで実行しています。
サービスコードは次のとおりです。
[Unit]
Description=Test
[Service]
User=ubuntu
Type=simple
ExecStart=/usr/bin/ruby /home/ubuntu/main/test.rb
Restart=on-failure
RestartSec=1s
[Install]
WantedBy=multi-user.target
ターゲット、ユーザー名、またはタイプを変更してみましたが、何も起こりませんでした。雑誌では私に具体的な情報を提供していません。サービスを開始するとスムーズに実行されます。
ただし、スクリプトが失敗またはテストするためにスクリプトを終了するたびに、再起動操作は無視されます。
答え1
依存関係の問題のようです。
Systemdが実行されており、スクリプトを実行する前にRubyを実行する必要があります。したがって、起動時にRubyがロード/完了する前にサービスが実行される可能性があります。これがボックスが機能して実行された後に実行できる理由です。
[Unit] 'After ='に追加されたRuby環境のサービス名を確認してください。(それは何かはよくわかりません。)
その後、Systemdはサービスのロードを試みる前にRubyがロードされるのを待つ必要があります。
Rubyスクリプトを調べて、必要な依存関係が何であるかを確認してください。たとえば、ネットワークを事前に起動して実行する必要があります。 [Unit]の下に「After =」を追加してから、必要な依存関係を追加できます。
After=network.target
これが、ボックスが実行され、必要な依存関係がロードされた後にサービスを開始できる理由です。