第1回・第2回と、DTIの提供するServersMan@VPSを例にして紹介させていただきました。今回はパトロン様のご提供にて、GMOのVPSでNEMのスーパーノードを構築させていただきました。本当にありがとうございます。
こちらのサーバにて今回利用するプランの概要は次の通りです。
多くの点で同じ作業となりますので、基本は下記の記事を参照してください。こちらには上書き部分を記載しています。
http://blog.minarin.moe/entry/2017/02/15/002342blog.minarin.moe
まずは前記事の1.〜2.9章までの記事を参照してスーパーノードを構築する部分まで終了させます。
前回のOSUbuntu14を使用しておりましたが、今回のOSバージョンではシステムのプロセス管理方法が新しいもの(systemd)に変わっております。一件似てる様に思えても、最新の管理方法を採用しておりますので、私自身初めてです。
では、ここから本題に入ります。基本的に以下で表示される章番号は、前の記事を上書きする形となります。
2. サーバ側の設定
2.10 自動起動の設定
本章2.7迄でスーパーノードとしてきちんと動作をしております。但し、サーバが何かしらの理由で再起動した場合や、NISやServantプログラムが単体で異常終了してしまった場合には、スーパーノードとして動いていない事となり報酬も得られません。
ここでは、サーバ起動時に自動でサービスをスタートされる事と、プロセスの異常終了時に自動的に再起動させる設定を行います。
以下の内容のファイル/etc/systemd/system/nem-nis.service
をroot権限にて新規に作成します。
[Unit] Description = NEM NIS Server After = network.target [Service] WorkingDirectory = /home/nem/nemServer ExecStart = /home/nem/nemServer/nix.runNis.sh Restart = always Type = simple User = nem Group = nem LimitNOFILE=100000 [Install] WantedBy = multi-user.target
もしも、エディター等不慣れな場合は、次の方法で作成する事もできます。ここでは、cat
コマンドを使って標準入力からファイルの内容を書き込みます。
root@localhost:/~# cd /etc/systemd/system root@localhost:/etc/systemd/system# ls nem-nis.service ls: cannot access 'nem-nis.service': No such file or directory (その名前のファイルやディレクトリが存在しないと言われます) root@localhost:/etc/systemd/system# cat > nem-nis.service (ここにファイルに記述する文字列を一気にペーストします) (ペースト後カーソルが行頭に無い場合は一度リターンキーを押し改行します) (CTL-d を入力すると標準入力が閉じファイルが作成されます) root@localhost:/etc/systemd/system# ls nem-nis.service nem-nis.service root@localhost:/etc/systemd/system#
作成しましたら、chmod 755 /etc/systemd/system/nem-nis.service
を実行し、実行権限を付与します。
同様な操作で、以下の内容のファイル/etc/systemd/system/nem-servant.service
をroot権限にて新規に作成します。
[Unit] Description = NEM Servant program After = network.target nem-nis.target [Service] WorkingDirectory = /home/nem/nemServer/servant ExecStart = /home/nem/nemServer/servant/startservant.sh Restart = always Type = simple User = nem Group = nem LimitNOFILE=100000 [Install] WantedBy = multi-user.target
作成しましたら、chmod 755 /etc/systemd/system/nem-servant.service
を実行し、実行権限を付与します。
最後に追加した2つのファイルをsystemdに教えてあげる為に、systemctl daemon-reload
のコマンドを実行しておきます。
上記登録方法で登録した方法で起動テストを行いますので、現在動いているNISとServantのプロセスを停止します。
root@localhost:/# pgrep -fl org.nem (※Ubuntsu14 では、-fa でしたので間違わない様に!) 459 java -Xms1G -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter 477 java -Xms256M -Xmx256M -cp .:jars/* org.nem.rewards.servant.NodeRewardsServant (※ここで表示された先頭の数字が後ろに続くプロセスのプロセスIDとなります) root@localhost:/# kill -SIGTERM 459 477 (又は) root@localhost:/# pkill -SIGTERM -f org.nem root@localhost:/# pgrep -fl org.nem (何も表示されなければプロセスは終了しています) root@localhost:/#
現在は、NISサーバ及びServantプログラムが停止している状態ですので、再起動時の自動起動の設定を行なった上で手動で起動させてみます。
root@localhost:/# systemctl enable nem-nis.service root@localhost:/# systemctl enable nem-servant.service root@localhost:/# systemctl start nem-nis.service root@localhost:/# systemctl start nem-servant.service root@localhost:/#
これで、問題がなければNISサーバとServantサーバは正常に起動しているはずです。
念のためにきちんと動作をしているか調べます。systemctl
コマンドを使って調べる事も可能ですが、プロセスを見た方が簡単なので以下の様に確認します。
root@localhost:/# pgrep -fl org.nem (※Ubuntsu14 では、-fa でしたので間違わない様に!) 8873 java -Xms1G -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter 8887 java -Xms256M -Xmx256M -cp .:jars/* org.nem.rewards.servant.NodeRewardsServant root@localhost:/# (10秒程待ち同じコマンドを実行します) root@localhost:/# pgrep -fl org.nem 8873 java -Xms1G -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter 8887 java -Xms256M -Xmx256M -cp .:jars/* org.nem.rewards.servant.NodeRewardsServant
この時、コマンドを実行した時に先頭に表示されるプロセスIDが同一であれば正常に動いています。 もし、数字が異なっている場合は、一度下記の様にしてプロセスの起動を停止します。
root@localhost:/# systemctl stop nem-nis.service root@localhost:/# systemctl stop nem-servant.service root@localhost:/# systemctl disable nem-nis.service root@localhost:/# systemctl disable nem-servant.service root@localhost:/#
うまく動作しない場合は、もう一度2.10章で作成したファイルが間違ってないかどうか確認しながらやり直してみてください。
問題なく動いている様であればsystemd
の設定は終了です。
2.10.1 ログファイルの設定変更(新章)
この時点でNISサーバとServantプログラムは正常に動いていますが、ログファイルに問題があります。 現状では、詳細なログファイルは再起動と共に捨てられてしまいます。更には通常のログは/var/log/syslogにリアルタイムに出力され続けます。NISサーバの出力するログファイルはかなり多いので、他のログは埋もれてしまう事になります。
ここでは、journal
システムの設定変更を行います。
まず、mkdir /var/log/journal
コマンドにて、journalディレクトリを作成します。journald
(正確にはsystemd-journald
)はメモリー領域に詳細なログを貯めているのですが、このディレクトリを作るとその配下に情報を貯める様になります。実際のログファイルの閲覧には、journalctl
コマンドを使います。
次に、syslogファイルにも出力しているので、これを出力しないようにします。設定ファイルは、/etc/systemd/jounald.conf
です。
root@localhost:/var/log# cd /etc/systemd/ root@localhost:/var/log# cp -p journald.conf journald.conf.org 32行目を編集します 32c32 < #ForwardToSyslog=yes (編集前) --- > ForwardToSyslog=no (編集後) root@localhost:/var/log# systemctl restart systemd-journald.service (jounaldの再起動)
tail -f /var/log/syslog
コマンドにて、NISサーバ等のメッセージが流れる様に出てこなければ問題ありません。
そして、NISサーバ等のログは、jounalctl
コマンドで参照する事ができます。リアルタイムにログを見るのであれば、journalctl -f
と入力します(この場合サービスを指定していませんので、systemの全てのログが流れていきます)。
なお、jounald
が保存するログファイルは、デフォルトの設定ではディスクの全容量に対して10%以上になった場合、または空き容量が15%以下になった場合に、古いエントリーから順に削除されます。ここでは行いませんが、任意に容量を指定する事も可能です。
あとがき
いかがでしたでしょうか。同じOSでもバージョンによってこれだけ大きく変化をしていきます。 プロセス管理方法は、時代的に他のUNIXでも SysVinit → upstart → systemd へと進化をしています。
今後は、他のOSをレンタル出来る機会があれば、また記事を作成するかもしれません。 そして次回は、OS回りの設定を書きたいと思っています。