Ubuntuでハートビートパケットを送信する方法 | 社員,やってみた

こんにちは。リブーター”ヲタク”の元・開発アシスタントです。最近、カスタマーサポート課に転属しました。

このコラムでは「お客様にリブーターを使いこなしていただきたい」という個人的な願いを込めて、私が個人的に勉強した事や試してみた事の中から、お客様に役立ちそうな情報を共有させていただきます。

今回は「Ubuntu を導入したパソコンから常時、ハートビートパケットを送出する方法」を試してみました。

初めに

最近、サイネージ用STBでもLinux系のOSが増えてきたそうです。明京リブーターのハートビート監視を使いたいけれど、Linux用のハートビートパケット送出ソフトが無い…。そんなお客様の役に立ちたくて「Ubuntu を導入した私のパソコンから常時、ハートビートパケットを送出できた方法」を紹介いたします。
(コピペOKです!ただし、あくまでも私の環境で実現しただけですので、動作保証するものではありません。あしからず…)

Ubuntu を導入したパソコンから常時、ハートビートパケットを送出する方法の概要

1. Pythonをインストールする(通常、Ubuntuにはデフォルトでインストールされていますので、説明省略)。

2. 必要なPythonライブラリをインストールする(socketライブラリはデフォルトで含まれていますので、説明省略)。

3. UDPパケット送信スクリプトを作成する。

4. スクリプトを自動起動させる。

UDPパケット送信スクリプトを作成する方法

1. お好みのテキストエディタを開きます(例: nano、vim、geditなど)。

2. 新しいPythonスクリプトファイルを作成します。私は「send_hb.py」という新しいスクリプトファイルを作成しました。

nano vi send_hb.py

3. 次のPythonコードをファイルに追加します。

送信先のIPアドレス、ポート番号、送信元のポート番号、送信データ内の「HB」か「MK」か、送信間隔などは適宜調整してください。

import socket
import time

# 送信先のIPアドレスとポート番号
UDP_IP = "127.0.0.1" # 送信先のIPアドレスを指定
UDP_PORT = 9100 # 送信先のポート番号を指定

# 送信元のポート番号
SOURCE_PORT = 9100 # 送信元のポート番号を指定

# 送信データ
MESSAGE = "MEIKYHBrn".encode('utf-8')
# 必要に応じて「MK」の箇所を「HB」に変更

# ソケットを作成
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("", SOURCE_PORT)) # 送信元のポート番号をバインド

try:
 while True:
  # データを送信
  sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
  print(f"Sent: {MESSAGE}")

  # 送信間隔を指定。ここでは「5秒」待機
  time.sleep(5)

except KeyboardInterrupt:
 print("Terminated by user")
finally:
 # ソケットを閉じる
 sock.close()

スクリプトの自動起動方法

1. 新しいサービスファイルを作成します。私は「send_hb.service」という新しいサービスを作成しました。

sudo nano /etc/systemd/system/send_hb.service

2. 次の内容をサービスファイル内に追加します。

「/home/〇〇/send_hb.py」の箇所は事前に作成したスクリプトの正しいパスに変更してください。
「User=〇〇」の「〇〇」の箇所にはスクリプトを実行するユーザー名を指定してください。
「After=network-online.target と Wants=network-online.target」を追加して、ネットワークがオンラインになるまで待機するように設定しています。

[Unit]
Description=Send UDP packets on startup
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/python3 /home/〇〇/send_hb.py
Restart=on-failure
RestartSec=5s
User=〇〇

[Install]
WantedBy=multi-user.target

3. サービスを有効にして起動します。

sudo systemctl daemon-reload
sudo systemctl enable send_hb.service
sudo systemctl start send_hb.service

おまけ

サービス実行後の権限の確認。〇〇の箇所は事前に作成したスクリプトの正しいパスに変更してください。

chmod +x /home/〇〇/send_hb.py

サービスの再起動方法

sudo systemctl restart send_hb.service

サービスの停止

sudo systemctl stop send_udp.service

サービスの無効化(自動起動解除)

sudo systemctl disable send_udp.service

サービスファイル削除

sudo rm /etc/systemd/system/send_udp.service

サービスログの確認

sudo journalctl -u send_hb.service

特定のアプリケーションのフリーズを検知できるスクリプトも

以上が、Ubuntuを導入したパソコンから常時、ハートビートパケットを送出する方法です。パソコンの起動後、ネットワークがオンラインになるまで待機してから、ハートビートパケットの定期送信が始まります。OSがフリーズすれば、ハートビートパケットの送信が実行できなくなりますので、リブーターでフリーズを検知できるようになります。

「動画再生ソフトが動作している時のみハートビートパケットを送信する」スクリプトに変更し、動画再生ソフトを「pkill」コマンドで仮想的にフリーズさせたところ、意図した通りにハートビートパケットの送信が停止し、リブーターによって再起動させることもできました。もちろん、スクリプト内のソフト名を変更すれば、監視対象を他のソフトに変更することも可能です。興味のある方にはスクリプトの内容をお伝えしますので、ぜひお問い合わせください。

お問い合わせはこちら

お客様がこの情報を参考にして、リブーターの機能を最大限に活用できることを願っています。今後も、役立つ情報を提供してまいりますので、どうぞお楽しみに。

おすすめ記事