WiFi接続を確立するconWlan0.serviceというシステムサービスがあります。今、定期的に接続を確認するために別のユニットを作成したいと思います。これが合理的な始まりですか?
[Unit]
Description=...
After=conWlan0.service
OnFailure=conWlan0.service
[Service]
Type=simple
ExecStart=/usr/bin/checkWiFi
RestartSec=120
Restart=always
すべてが正しい場合、checkWifiスクリプトは0で終了し、そうでない場合はエラーコードを返します。どんな提案がありますか?
答え1
何かを定期的に実行するには、SystemDタイマーデバイスを使用する必要があります。継続的に再起動されるサービスデバイスを持つことは、基本的にシステムが常にパフォーマンス低下モードにあるため、良いアイデアではありません(1つ以上のサービスを実行することはできません)。
詳細はこちらからご覧いただけます。スタックオーバーフロー回答、内部にSystemDタイマーに関するArch Linux Wikiマニュアルページにありますが、systemd.timer
そのポイントは次のとおりです。
1. 検査サービスの設定
/etc/systemd/system/checkwifi.service
:
[Unit]
Description=...
[Service]
Type=oneshot
ExecSTart=/usr/bin/checkWiFi
2. タイマーを設定して時々WiFiを確認してください
/etc/systemd/system/checkwifi.timer
:
[Unit]
Description=Timer for checkWifi
After=conWlan0.service
[Timer]
OnActiveSec=120
[Install]
WantedBy=timers.target
3. タイマーデバイスの起動と起動
systemctl enable --now checkwifi.timer
タイマーを起動してもconWlan0.service
まだ起動していない場合は、systemctl
タイマーの前提条件が満たされるまでブロックして待ちます。