背景

某サーバー、記事にもうっすら書いた通りOpenMediaVault 6からUbuntu + Nextcloudへ乗り換えたわけですが、WebUIが表示しているものはOSが提供である点とそうではないという差があります。

OpenMediaVaultはOSとして提供されているので、HDDのS.M.A.R.T.やRAIDの管理なども行っており、異常があるとWebUIで確認できます。一方NextcloudはWebアプリのため、HDDやRAIDの状態を管理することができません。運用していくにあたって、普段は特に気にする必要はないのですが、なんらかの異常が発生した時には1秒でも早く知りたいわけです。

通常、こういった通知にはメールがよく使われます。その手の管理ツールにはそういった設定が用意されていて、外部に送ることさえできれば自分が普段使っているメールアドレスを指定してメールを飛ばせば良いわけです。しかし、このサーバーで外部にメールを送る手段を用意するのは面倒なので、せっかくならNextcloud内で完結したいという思いがあります。

Nextcloudには通知機能があります。アプリ内のアップデートなどを知らせてくれるものなので、Windowsデスクトップアプリを入れていると、通知をポップアップしてくれます。この通知、実は任意に行うことができます。これをシェルスクリプトから呼び出すことのできるようにすることで、OSからの異常を通知することで、異常などに気づきやすくするというのが目的です。

今回は、シェルスクリプトから呼び出してNextcloudに通知するシェルスクリプトを書きます。機能を分割して作ることによって、メンテナンス性を良くします。

実装

任意の場所にスクリプトを作成します。rootから実行しやすいところにおいておくとよいです。

your_nextcloud_id は、各自置き換えてください。ここに指定したIDに通知が行きます。

--define apc.enable_cli=1 は、必要なサーバーと不要なサーバーがあります。Nextcloud本体のconfig.phpでAPCuを有効にしている場合は必要です。

sudo vi /root/sh/nextcloud_notification.sh
#!/bin/bash
sudo -u www-data php --define apc.enable_cli=1 /var/www/nextcloud/occ notification:generate your_nextcloud_id "$1" -l "$2"

実行権限を付与します

sudo chmod +x /root/sh/nextcloud_notification.sh

使用方法

ショートメッセージ(255文字まで)、ロングメッセージ(4000文字まで)を入れて実行してください。ロングメッセージは省略可能です。

/root/sh/nextcloud_notification.sh "short message" "long message"

これをほかのシェルスクリプトから呼び出すことで、任意の通知を発生させるベースができました。

参考資料

notifications/admin-notifications.md at master · nextcloud/notifications · GitHub