頑張ったシステム起動後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が提案したように