3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Symbol Dual をサービス化(デーモン化)する

Last updated at Posted at 2024-12-08

サービスファイルの作成

MongoDB

Server から Broker へ渡った情報を保存するためのサービスです。Rest の情報の取得元のひとつでもあります。

sudo vi /etc/systemd/system/symbol-db.service
/etc/systemd/system/symbol-db.service
[Unit]
Description=Symbol MongoDB
Wants=network.target
After=network.target

[Service]
Type=forking
PIDFile=/run/mongo/symbol-db.pid
ExecStart=/usr/bin/mongod --dbpath=dbdata --wiredTigerCacheSizeGB 2 --pidfilepath /run/mongo/symbol-db.pid --fork --syslog
KillSignal=SIGINT
User=harvestasya
Group=harvestasya
WorkingDirectory=/opt/symbol-node
LimitNOFILE=65536
UMask=077

[Install]
WantedBy=multi-user.target

pid ファイルの保存先を作成します。

sudo mkdir /run/mongo
sudo chown harvestasya: /run/mongo

再起動するとディレクトリが消えてしまうので、再起動時に作成するようにします。

sudo vi /etc/tmpfiles.d/mongo.conf
/etc/tmpfiles.d/mongo.conf
#Type   Path                    Mode    UID            GID          Age  Argument
d       /run/mongo              0755    harvestasya    harvestasya  -

Rest Gateway

Symbol ブロックチェーンのノードとクライアント間の通信を管理するための RESTful API を提供するサービスです。基本的に MongoDB からデータを取得するので、MongoDB に依存します。
一部のデータは、Server や Broker から直接取得しますが、必要になった際に接続するので依存関係からは外しています。

sudo vi /etc/systemd/system/symbol-rest.service
/etc/systemd/system/symbol.service
[Unit]
Description=Symbol Rest Gateway
Requires=network.target symbol-db.service

[Service]
Type=idle
ExecStart=/home/harvestasya/.volta/bin/npm start ../rest/rest.json
Restart=on-failure
RestartSec=2
User=harvestasya
Group=harvestasya
WorkingDirectory=/opt/symbol-node/app
StandardOutput=journal
StandardError=journal
LimitNOFILE=65536
UMask=077

[Install]
WantedBy=multi-user.target

Symbol Recovery

異常終了などで lock ファイルが残った際に起動します。

sudo vi /etc/systemd/system/symbol-recovery.service
/etc/systemd/system/symbol-recovery.service
[Unit]
Description=Symbol Recovery

[Service]
Type=oneshot
ExecCondition=/bin/sh -c '/usr/bin/test -f /opt/symbol-node/data/server.lock || /usr/bin/test -f /opt/symbol-node/data/broker.lock'
ExecStart=/usr/local/catapult/bin/catapult.recovery .
KillSignal=SIGINT
Restart=on-failure
RestartSec=2
TimeoutStopSec=60
User=harvestasya
Group=harvestasya
WorkingDirectory=/opt/symbol-node
Environment="LD_LIBRARY_PATH=/usr/local/catapult/deps"
StandardOutput=journal
StandardError=journal
LimitNOFILE=65536
UMask=077

[Install]
WantedBy=multi-user.target

Symbol Broker

Server からファイルスプールを通してデータを取得するサービスです。MongoDB への接続や Rest からの ZeroMQ 接続があるので、これらを依存関係に含めています。

sudo vi /etc/systemd/system/symbol-broker.service
/etc/systemd/system/symbol-broker.service
[Unit]
Description=Symbol Broker
Wants=symbol-recovery.service
Requires=network.target symbol-db.service symbol-rest.service

[Service]
Type=idle
ExecStart=/usr/local/catapult/bin/catapult.broker .
ExecStopPost=/bin/bash -c 'while systemctl is-active --quiet symbol-broker.service; do sleep 1; done; sudo systemctl stop symbol-rest.service'
ExecStopPost=/bin/bash -c 'while systemctl is-active --quiet symbol-broker.service; do sleep 1; done; sudo systemctl stop symbol-db.service'
KillSignal=SIGINT
Restart=on-failure
RestartSec=2
TimeoutStopSec=20
User=harvestasya
Group=harvestasya
WorkingDirectory=/opt/symbol-node
Environment="LD_LIBRARY_PATH=/usr/local/catapult/deps"
StandardOutput=journal
StandardError=journal
LimitNOFILE=65536
UMask=077

[Install]
WantedBy=multi-user.target

Symbol Server

前々回に作成したsymbol.serviceを編集します。broker の起動後に起動することになります。

sudo vi /etc/systemd/system/symbol.service
/etc/systemd/system/symbol.service
[Unit]
Description=Symbol Node
Wants=symbol-recovery.service
Requires=network.target symbol-broker.service

[Service]
Type=idle
ExecStart=/usr/local/catapult/bin/catapult.server .
ExecStopPost=/bin/bash -c 'while systemctl is-active --quiet symbol.service; do sleep 1; done; sudo systemctl stop symbol-broker.service'
KillSignal=SIGINT
Restart=on-failure
RestartSec=2
TimeoutStopSec=300
User=harvestasya
Group=harvestasya
WorkingDirectory=/opt/symbol-node
Environment="LD_LIBRARY_PATH=/usr/local/catapult/deps"
StandardOutput=journal
StandardError=journal
LimitNOFILE=65536
UMask=077

[Install]
WantedBy=multi-user.target

systemctl stopのパスワード不要化

ExecStopPostsudo systemctl stopしているので、パスワードなしで実行できるようにします。

nano で編集する場合は、EDITOR=vi不要です。

sudo EDITOR=vi visudo

@includedir /etc/sudoers.dの前に追記する。

harvestasya ALL=(ALL:ALL) NOPASSWD: /bin/systemctl stop symbol-db.service
harvestasya ALL=(ALL:ALL) NOPASSWD: /bin/systemctl stop symbol-rest.service
harvestasya ALL=(ALL:ALL) NOPASSWD: /bin/systemctl stop symbol-broker.service

サービスをリロード

sudo systemctl daemon-reload

サービスを有効化

sudo systemctl enable symbol

サービスを開始

sudo systemctl start symbol

サービスを停止

sudo systemctl stop symbol

ログの確認

sudo journalctl -u symbol -r

リアルタイムで確認したい場合は-fオプションを付けます。

sudo journalctl -u symbol -f

さらに色を付けたい場合は、-o catオプションを付けます。

sudo journalctl -u symbol -f -o cat
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?