計量接続でシステムタイマーが実行されないようにする

計量接続でシステムタイマーが実行されないようにする

私の電子メールをダウンロードするために10分ごとに実行されるシステムタイマーがありますofflineimap。問題は、時には大量の電子メールまたは大容量の添付ファイルを受け取り、携帯電話のデータ通信接続を使用して移動中である可能性があることです。

nmcli現在アクティブな接続を照会し、その接続がデータ通信接続であることを確認するカスタムスクリプトがあります。その場合、offlineimapまったく実行されません。

私の質問は、システムタイマーが同じことをすることができるかどうかです。次のように:

[Timer]
OnUnitInactiveSec=10m
RunOnMetered=no

ベストアンサー1

まず、接続が測定されるかどうかを示すために依存する単位が必要です。たとえば、次のようになります。

[Unit]
Description=Check if the current connection is metered

[Service]
Type=oneshot
ExecStart=check-metered-connection.sh

以下はcheck-metered-connection.sh簡単なdbusチェックです。

#! /usr/bin/bash

metered_status=$(dbus-send --system --print-reply=literal \
        --system --dest=org.freedesktop.NetworkManager \
          /org/freedesktop/NetworkManager \
          org.freedesktop.DBus.Properties.Get \
          string:org.freedesktop.NetworkManager string:Metered \
          | grep -o ".$")

if [[ $metered_status =~ (1|3) ]]; then
  echo Current connection is metered
  exit 1
else 
  exit 0
fi

これにより、組織はサービスに依存し、次のように開始できます。

Requires=unmetered-connection.service
After=unmetered-connection.service

誰かがこれについて考え、親切にGithubにコードを投稿しました。jdorel/systemd 測定接続の依存関係完全なコードを取得します。

ここにあるすべてのコード例は私のものではありませんが、リンクされたリポジトリからそのままコピーされました。。完全性のためにここにコピーしました。

おすすめ記事