30分の遅延でシステム起動スクリプトを作成する

30分の遅延でシステム起動スクリプトを作成する

頑張ったシステム起動後30分後にrkhunterスキャンを開始するsystemd起動スクリプトを作成します。私のラップトップは次のとおりです

[Unit]
Description=starts rkhunter and displays any findings with zenity

[Service]
ExecStartPre=/bin/sleep 1800
ExecStart=/usr/local/sbin/rkhunter-check

[Install]
WantedBy=default.target

ただし、タイムアウトエラーが原因で失敗します。

Job for rkhunter.service failed because a timeout was exceeded.

ExecStartPreはこのように動作しないようです。

この問題をどのように解決できますか?

完璧なソリューションは次のとおりです。

  • 起動後30分後に最初に実行
  • 48時間ごとに繰り返します(ノートブックを絶対にオフにしない場合)。

答え1

使うタイマーユニットサービス開始時間を予約してください。タイマーデバイスは、単一のタイマーを使用して開始から30分後に最初の実行をスケジュールし、最初の実行後48時間繰り返すようにスケジュールするのに十分柔軟です。 (最初の開始後48時間、または実行完了後48時間のいずれかを選択できます。)

文書rkhunter.service:

[Unit]
Description=rkhunter check with zenity findings

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/rkhunter-check

文書rkhunter.timer:

[Unit]
Description=timer for rkhunter check

[Timer]
OnBootSec=30min
OnUnitActiveSec=48h

[Install]
WantedBy=timers.target

サービスユニットにセクションが必要ない理由は、[Install]30分後にサービスを実行するだけのブートシーケンス中にサービスユニットを「アクティブ化」したくないからです。

有効にする必要があります。時間制労働者したがって、実際に起動時に有効にされ、設定された時間にサービスユニットを起動します。だから:

systemctl daemon-reload
systemctl enable rkhunter.timer

以前にサービスを有効にした場合は、タイマーデバイスでのみ起動できるため、明示的に無効にする必要があります。

systemctl disable rkhunter.service

以前にこのサービスを有効にしたことがなく、この設定を最初から実装している場合は、このコマンドは必要ありません。

再起動後は、説明した要件に基づいて正常に動作します。

答え2

サービスで長いスリープコマンドを使用するには、ExecStartPre次のようにタイムアウトを無効にする必要がありますTimeoutStartSec=infinity

[Unit]
Description=starts rkhunter and displays any findings with zenity

[Service]
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 1800
ExecStart=/usr/local/sbin/rkhunter-check

[Install]
WantedBy=default.target

48時間ごとに繰り返しサービスを開始するには時間制労働者@filbrandenが提案したように

関連情報