systemdログが解析されたログ行に基づいてアクションをトリガーできますか?

systemdログが解析されたログ行に基づいてアクションをトリガーできますか?

場合によっては、カバーを閉じた後もラップトップがスリープモードに入らないことがあります。その理由はさまざまですが、一般的にドライバーの不注意によるものです。現時点では、数時間後にラップトップの電源を入れたときにバッテリーが完全に消耗し、電源が切れるか、バッテリーがひどく消耗するまで問題があるかどうかを知る方法はありません。

聴覚警告を生成するスクリプトを実行するなど、特定の特定のログ行またはパターンに対してアクションを実行するルールを作成したいと思います。理想的にはポーリングではなくイベントベースである必要があり、可能であればこれを達成するためにsyslog設定を設定しないことをお勧めします。

ログの例は次のとおりです。

can't change power state from D3cold to D0
can't change power state from D3hot to D0

ベストアンサー1

ログでログ解析を行わずにこれを行う方法を見つけましたが、これは本当に良い考えではありません。

代わりに、私は利点を活用しました。システム省電力フックを使用してログを確認し、目覚めた後、過去数分間スリープが失敗したことを確認します。この場合、オーディオファイルが再生されます。

私のツールは次の場所にあります。https://gitlab.com/jinnko/failed-sleep-alarm

重要なのは、/lib/systemd/system-sleep/スリープ、一時停止、または休止状態の前後にトリガーされるスクリプトを持つことです。その後、スクリプトはログを確認してアクションを実行できます。私の場合、スクリプトは次のようになります(最新バージョンはリポジトリを確認してください)。

#!/usr/bin/env bash

set -euo pipefail

logger -s -p kern.debug "Invoked $(realpath "$0") $*"

case $1/$2 in
  post/*)
    if /usr/bin/journalctl --since "2m ago" | grep -E "Failed to start (Hibernate|Sleep|Suspend)"; then
      amixer -q sset Master unmute
      amixer sset Master '35%'
      for i in {1..3}; do
        mpg123 -q /usr/share/failed-sleep-alarm/pig.mp3
      done
    fi
    ;;
esac

おすすめ記事