私はLinux Mint 20.2(Debianを介したUbuntuのMint)を実行しています。
abrauneggのonedriveクライアントから次の内容を出力するログファイルがあります(onedriveクライアントはsystemdを介して継続的に実行されます)。
2022-Jan-16 14:40:14.9203443 Starting a sync with OneDrive
2022-Jan-16 14:40:14.9206537 Syncing changes from OneDrive ...
2022-Jan-16 14:40:16.1507118 Sync with OneDrive is complete
2022-Jan-16 14:40:40.7630634 Retry sync count: 1: Cannot open file `./Untitled Document' in mode `rb' (No such file or directory)
2022-Jan-16 14:40:41.4198398 Moving ./Untitled Document to ./linux_mint_is_great.txt
2022-Jan-16 14:40:41.9391852 Uploading new file ./linux_mint_is_great.txt ... done.
2022-Jan-16 14:40:45.4773655 Uploading new file ./linux_mint_is_great (copy).txt ... done.
2022-Jan-16 14:40:47.8734736 Uploading new file ./linux_mint_is_great (another copy).txt ... done.
2022-Jan-16 14:40:48.1857814 Starting a sync with OneDrive
2022-Jan-16 14:40:48.186048 Syncing changes from OneDrive ...
2022-Jan-16 14:40:49.4558493 Sync with OneDrive is complete
2022-Jan-16 14:40:59.2265195 Deleting item from OneDrive: ./linux_mint_is_great (copy).txt
2022-Jan-16 14:40:59.3837201 Deleting item from OneDrive: ./linux_mint_is_great.txt
2022-Jan-16 14:40:59.5461714 Deleting item from OneDrive: ./linux_mint_is_great (another copy).txt
クライアントはいくつかのログイベントをシステム通知に出力するように設定されていますが、非常に重要なイベント(onedriveに接続できないなど)のみを出力し、他の問題を通知するオプションはありません(通知する予定もありません)。
すべてのイベントのマイログファイルは次の場所にあります。home/john/.config/onedrive/john.onedrive.log
私が望むのは、上記のログファイルにあるイベント(たとえば、「新しいファイルをアップロードしています...」、「OneDriveからアイテムを削除しています...」)、および表示したいその他のアイテムに関する通知を表示するようにシステムを設定することです。です。ログから-tailを実行してください。しかし、これは絶対にすべてを示しており、どのイベントが起こっているのかさえわかりません。
だから:
ログファイルからシステム通知を実行する方法はありますか?ファイル内のすべての新しい行に通知を送信するのが好きですか?
これが可能であると仮定すると、「削除」、「アップロード」、または通知を開始したい他の項目で始まる行のみを表示するようにフィルタリングできますか?
これを行うことができるGUIツールはないようです(通知設定にはこれらのカスタマイズのオプションは表示されません)...しかし、ある種のシェルスクリプトがログファイルを読み取り、関連行をシステム通知アプリに送信するかもしれません。 ?それでは、起動時にシェルスクリプトを実行することも、systemdを介して実行することもできますか?
答え1
まず、GUI通知の場合は、次のものを使用できます。notify-send
。これを実行する「標準」方法は、有効notify-send <summary> [body]
期限、緊急度、カテゴリなどを変更できることです。
これで、特定のログファイルに表示されるすべての新しい行に関する通知を受け取るには、次のコマンドを実行できます。
tail -n -0 -f <log file> | while read line; do notify-send "Notification from <log file>" "$line"; done
tail -n -0 -f <log file>
ファイルに追加されたすべての新しい行が表示され(ファイルの先頭を無視)、ループはwhile
表示される各行についてGUI通知を送信します。
特定の行をフィルタリングするには、コマンドgrep
に追加するだけです。tail
たとえば、「削除中」、「アップロード中」で始まる行を表示したい場合:
tail -n -0 -f <log file> | grep --line-buffered -e ^Deleting -e ^Uploading | while read line; do notify-send "Notification from <log file>" "$line"; done
このフラグは、パターンが発生した直後に追加のバッファリングなしでパターンに一致する行が出力されることを保証--line-buffered
します。grep
もちろん、while
ループ内には、$line
コンテンツ(変更の緊急性、有効期限など)に応じてパラメータを変更するロジックを追加できます。notify-send
修正する
答えを投稿してから知っていました。@ArtemS.Tashkinovコメントに投稿しましたスクリプトjournalctl
githubのものは、ファイルからデータを読み取ることを除いて、私が提案したものとほぼ同じです。そこでより多くのアイデアを見つけることができます。