定期的に任意のジョブを実行する方法

Ubuntuでは任意のジョブ(自分が書いたスクリプトを含む)を任意の時間に実行することができます。

今回は、「イーサリアムのバリデーターが実行されているかを判定して実行されていなければ再起動する」というスクリプトを5分毎に実行する、というケースを例に設定方法を説明します。

※Lighthouseのv1.1.3アップデートでビーコンノードが一時的にメモリを大量消費するバグが改修されたためバリデーターが落ちることはなくなりました。

設定手順

  1. スクリプトのファイルを作成する。
sudo nano /root/rebootvalidator.sh
  1. 「バリデーターのプロセスが実行されているかを判定して実行されていなければ起動する」というスクリプトを書き込んで保存する。
#!/bin/bash

# "lighthouse vc"という単語を含むプロセスが何個実行されているかカウントする
count=`ps ax | grep -v grep | grep -c "lighthouse vc"`

# もしカウント=0ならバリデーターを起動する
if [ $count = 0 ]; then
  date
  echo "validator is dead... restarting validator..."
  sudo systemctl start lighthousevalidator
fi
  1. Cronの編集画面を開く。
sudo crontab -e
  1. 以下の行を追記して、5分毎に作成したスクリプトが実行されるようにする。
    (>>をつけることで、実行した結果をログとして残すことができます)
*/5 * * * * bash /root/rebootvalidator.sh >> /var/log/rebootvalidator.log

※試しにバリデーターを手動で停止して、スクリプトが正常に動くかテストした方がよいです。

# 手動でバリデーターを停止
sudo systemctl stop lighthousevalidator

# 5分後にバリデーターのプロセス状態とログファイルを確認する
sudo systemctl status lighthousevalidator
nano /var/log/rebootvalidator.log