systemdは失敗したときにサービスを再起動できません。

systemdは失敗したときにサービスを再起動できません。

pacman -Sy起動時に一度実行されるRefreshPacman.serviceというサービスファイルがあります。ただし、After=network-online.targetVPN以外のルーターへの接続のみが考慮されるため、パックマンはミラーに接続できません。最初はパックマンを使用しrefreshPacman.timerてから60秒待ってこの問題を解決しようとしましたが、これはラップトップがnetwork-online.targetログイン時間を超えた後(私にとっては遅すぎます)、パックマンが更新されたか、何らかの理由で更新失敗の種類を忘れた場合に発生します。

以前のサービスファイルを修正してより良いソリューションを作成しようとしましたが、systemdは成功または放棄する前に何度もサービスをロードしようとしました。サービスが機能できなくなった後、現在は次の状態です。

[Unit]
Description=refreshes pacman's database
Wants=network-online.target
Wants=mullvad-daemon.service
After=network-online.target
After=mullvad-daemon.service

StartLimitIntervalSec=180s
StartLimitBurst=3

[Service]
Type=oneshot
ExecStart=/usr/bin/pacman -Sy
RemainAfterExit=true

StandardOutput=journal

Restart=on-failure
RestartSec=60s

[Install]
WantedBy=multi-user.target

私が理解したのは、次のようなものでなければなりません。

1. run the `ExecStart` once, (fail)
2. wait `RestartSec` seconds, (maby fail?)
3. repeat step 2 `StartLimitBurst` number of times

しかし、両方によれば、journalctl -u refreshPacman.service -bリフレッシュ/var/log/pacman.logコマンドは放棄する前に一度だけ実行されます。内容を更新した後、サービスを無効にして再度有効にしたことを確認しましたが(systemdが私が指しているシンボルを編集したファイルが好きではない場合)、それを機能させることはできません。私はsystemdが一般的に動作する方法についての私の理解は依然として非常に限られているので、一般的に失敗または再起動がどのように機能するかを誤解しているかどうかはわかりません。

編集する

私は別のサービスファイルで遊んでいますが、何らかの理由で時間が次のように更新されました。

# nothing changed here

StartLimitIntervalSec=120s
StartLimitBurst=12

# nothing changed here

RestartSec=10s

サービスが正しく機能するようにしてください。私のテストであまりにも肥大化したタイマーを使用しているので、ログファイルを開くとまだ読み込まれていないようです。

編集2

回答を選択できないので、この質問を閉じる方法がわかりません。

ベストアンサー1

systemd(おそらく)操作を再開するのに時間がかかりすぎます(質問を閉じるための答え)

おすすめ記事