VPSでbtc daemonを運用としていると、何故か勝手に落ちることがあるので、バッチでnodeが動いているか確認して、動いていなかったら起動するコマンドをシェルスクリプトで実行する。
ログファイルに書き込む際に、command=”bitcoin-core.cli –getinfo –testnet | sudo tee -a ${log_FILE}”などとやってしまうと、retval=$?の返り値が、teeの方で判定されてしまうので、判定した後に書き込むとしないと行けない。
#!/bin/sh today=$(date "+%Y%m%d") time=$(date "+%Y%m%d %H:%M:%S") log_FILE="./log/log_${today}.log" if [ ! -e $log_FILE ]; then sudo touch ${log_FILE} fi command="bitcoin-core.cli --getinfo --testnet" eval $command retval=$? if [ $retval -eq 0 ] then echo "btc daemon is running. " $time | sudo tee -a ${log_FILE} else echo "btc daemon is stopped. " $time | sudo tee -a ${log_FILE} # command="bitcoin-core.daemon -testnet -prune=1000" command="echo try again!" eval $command fi
あとはこのシェルをcronで設定すれば良いだけですね。
### cronの設定
とりあえずバッチの実行時間は2時にしました。
$ dnf search crontabs
Failed to set locale, defaulting to C.UTF-8
AlmaLinux 8 – BaseOS 4.8 MB/s | 6.3 MB 00:01
AlmaLinux 8 – AppStream 7.1 MB/s | 12 MB 00:01
AlmaLinux 8 – Extras 36 kB/s | 20 kB 00:00
Extra Packages for Enterprise Linux 8 – x86_64 8.9 MB/s | 16 MB 00:01
nginx stable repo 26 kB/s | 55 kB 00:02
nginx mainline repo 77 kB/s | 135 kB 00:01
======================== Name Exactly Matched: crontabs ========================
crontabs.noarch : Root crontab files used to schedule the execution of programs
$ crontab -e
0 2 * * * /home/alma/command/btc_daemon.sh
$ systemctl restart crond
$ systemctl enable crond
$ systemctl status crond
● crond.service – Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor prese>
Active: active (running) since Sat 2024-02-24 21:38:44 JST; 43s ago
Main PID: 900566 (crond)
Tasks: 1 (limit: 5868)
Memory: 1.1M
CGroup: /system.slice/crond.service
└─900566 /usr/sbin/crond -n
あとは、明日ログを見て、実行されているようであれば、bitcoin-core.daemon のコメントアウトを外します。
※シェルを使うようになったのかと思うと感慨深い…