systemd-timer
ネットワークサービスを使用するスクリプトを定期的に実行するために使用しています。
問題は、システムが再起動または起きたときにインターネット接続がすぐに開始されず、タイマーがトリガーされ、スクリプトがエラーを返すことです(サービスが数秒待つと、スクリプトが正しく実行され、エラーが発生します)。次回実行までジョブを延期する必要はありません。)
1-ネットワーク接続が可能になるまでタイマー(またはそれに関連するサービス)が待機するようにするにはどうすればよいですか。
2-システムがまだオンラインになっていないときにタイマー(またはサービス)がスクリプトを呼び出さないようにする方法は?
答え1
タイマーセクションAfter=network-online.target
に追加されました。[Unit]
説明する:
[Unit]
タイマーは、サービスセクションに知られているすべての関連シーケンシングコマンドを受け入れます。実際、タイマーとサービス[Unit]
部品は同じです。[Install]
形公式マニュアル:
名前が「.timer」で終わるデバイス構成ファイルは、タイマーベースのアクティベーションのために systemd によって制御および監視されるタイマーに関する情報をエンコードします。
このマニュアルページには、このデバイスタイプに関連する設定オプションがリストされています。バラよりシステムユニット(5)すべてのデバイス構成ファイルに共通のオプションです。共通構成項目は、共通 [Unit] および [Install] セクションで構成されます。タイマー固有の設定オプションは、[Timer]セクションで設定されます。
理解しなければならないという意味だ。ネットワークオンライン。ネットワークが次のようになるかどうかを定義します。戻る。
network-online.targetは、ネットワーク「アップ」を積極的に待っているターゲットです。ここで、「アップ」の定義は、ネットワーク管理ソフトウェアによって定義される。一般的に、これは一種の構成され、ルーティング可能な IP アドレスを表します。主な目的は、ネットワークが構築されるまでサービスのアクティブ化を積極的に遅らせることです。
限定
network-online.target
小切手なしインターネットそれ以外の場合ネットワークつながる。もちろん、LAN自体ではインターネットにアクセスできない場合があります。接続を提供するためにルーターまたはISPに頼ることができない場合は、特定のtest-internet.service
Webサイトをpingする特別なプロトコルを作成し、一度成功した場合にのみアクティブとして定義する必要があります(そうでない場合は、失敗した場合は15秒ごとに再起動または開始します)。これはType=oneshot
サービスでなければなりませんRemainAfterExit=yes
。しかし、私はそれがあなたが求めているものだとは思わない。
範囲:システム/ユーザー
注意してくださいnetwork-online.target
。システム範囲単位。デバイスはユーザー範囲はそれを見ることができず、開始されません。この問題はリンク単位()を生成することで解決できますsystemctl --user link /lib/systemd/system/network-online.target
。パスは異なる場合があります。以下を実行して場所を確認できます。systemctl show --property FragmentPath network-online.target