mirror of
https://github.com/bisq-network/bisq.git
synced 2024-11-20 02:12:00 +01:00
Merge pull request #391 from ivilata/InitAndCronScripts
Init and cron scripts
This commit is contained in:
commit
d57fbdeca7
43
doc/bitsquare-sn.cron.sh
Executable file
43
doc/bitsquare-sn.cron.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
# Restart Bitsquare seed node daemons whose resident memory (RSS)
|
||||
# is over MAX_RSS_MiB.
|
||||
#
|
||||
# Scripts in the INITDIR must contain a ``SN_ADDRESS=<host:port>``
|
||||
# assignment.
|
||||
#
|
||||
# Exit with status 2 if there were restarted daemons.
|
||||
#
|
||||
# Author: Ivan Vilata-i-Balaguer <ivan@selidor.net>
|
||||
MAX_RSS_MiB=350
|
||||
|
||||
PIDDIR=/var/run/bitsquare-sn
|
||||
INITDIR=/etc/init.d
|
||||
|
||||
# Restart de daemon with the given address.
|
||||
restart() {
|
||||
rcscript=$(grep -El "^SN_ADDRESS=['\"]?$1['\"]?" $INITDIR/*)
|
||||
if [ "$rcscript" ]; then
|
||||
"$rcscript" restart
|
||||
fi
|
||||
}
|
||||
|
||||
restarted=
|
||||
max_rss_kib=$((MAX_RSS_MiB*1024))
|
||||
for pidfile in $PIDDIR/*.pid; do
|
||||
address=$(basename ${pidfile%.pid})
|
||||
pid=$(cat "$pidfile")
|
||||
test "$pid" || continue
|
||||
rss_kib=$(ps -o rss= "$pid")
|
||||
test "$rss_kib" || continue
|
||||
if [ "$rss_kib" -gt "$max_rss_kib" ]; then
|
||||
echo "Bitsquare seed node $address ($((rss_kib/1024))M) surpassed memory limit of ${MAX_RSS_MiB}M, restarting." >&2
|
||||
restart $address
|
||||
restarted=y
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$restarted" ]; then
|
||||
exit 2
|
||||
else
|
||||
exit 0
|
||||
fi
|
48
doc/bitsquare-sn.init.sh
Executable file
48
doc/bitsquare-sn.init.sh
Executable file
@ -0,0 +1,48 @@
|
||||
#!/bin/sh
|
||||
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
|
||||
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
|
||||
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
|
||||
fi
|
||||
### BEGIN INIT INFO
|
||||
# Provides: bitsquare-sn
|
||||
# Required-Start: $local_fs $remote_fs $named $network $time
|
||||
# Required-Stop: $local_fs $remote_fs $named $network $time
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Bitsquare seed node
|
||||
# Description: This script manages the execution of
|
||||
# a Bitsquare seed node process using
|
||||
# its own Tor node to provide a hidden service.
|
||||
### END INIT INFO
|
||||
|
||||
# Author: Ivan Vilata-i-Balaguer <ivan@selidor.net>
|
||||
|
||||
|
||||
## BEGIN CONFIGURATION
|
||||
# HOST:PORT address of seed node. Change this for each instance.
|
||||
SN_ADDRESS=1a2b3c4d5e6f7g8h.onion:8000
|
||||
|
||||
# Bitcoin network: 0=mainnet, 1=testnet, 2=regtest.
|
||||
SN_NETWORK_ID=0
|
||||
# Maximum number of connecitions to allow.
|
||||
SN_MAX_CONNECTIONS=50
|
||||
|
||||
# Location of the seed node jar file. Use to select a particular version.
|
||||
SN_JAR=~bsqsn/SeedNode-0.4.2.jar
|
||||
# User to run the seed node as.
|
||||
SN_USER=bsqsn
|
||||
## END CONFIGURATION
|
||||
|
||||
|
||||
# Using a name different than the daemon's base name
|
||||
# causes problems when stopping the process.
|
||||
#NAME="bitsquare-sn"
|
||||
DESC="Bitsquare seed node $SN_ADDRESS"
|
||||
START_ARGS="--chuid $SN_USER --background --make-pidfile"
|
||||
PIDFILE="/var/run/bitsquare-sn/$SN_ADDRESS.pid"
|
||||
DAEMON=/usr/bin/java
|
||||
DAEMON_ARGS="-jar $SN_JAR $SN_ADDRESS $SN_NETWORK_ID $SN_MAX_CONNECTIONS"
|
||||
|
||||
do_start_prepare() {
|
||||
mkdir -p "$(dirname "$PIDFILE")"
|
||||
}
|
85
doc/seed-node-daemon.md
Normal file
85
doc/seed-node-daemon.md
Normal file
@ -0,0 +1,85 @@
|
||||
# Running a seed node as a daemon
|
||||
|
||||
This document presents some steps to be able to run a Bitsquare seed node as
|
||||
an unattended daemon in a GNU/Linux server with a traditional System V init.
|
||||
|
||||
## Before you start
|
||||
|
||||
We assume that you have already configured a Bitsquare seed node to run in a
|
||||
computer. You will need to upload the seed node code and configuration to the
|
||||
server:
|
||||
|
||||
- The code is contained in the ``SeedNode.jar`` file which is usually left
|
||||
under ``seednode/target`` after building Bitsquare.
|
||||
- The seed node configuration is the ``Bitsquare_seed_node_HOST_PORT``
|
||||
directory under ``~/.local/share`` (Unix), ``%APPDATA%`` (Windows) or
|
||||
``~/Library/Application Support`` (Mac OS X).
|
||||
|
||||
## Dedicated user
|
||||
|
||||
In order to avoid security risks, it is highly recommended that you create a
|
||||
dedicated user in the server to run the seed node daemon, and that you forbid
|
||||
other users to access its files, for instance:
|
||||
|
||||
# adduser bsqsn
|
||||
# chmod go-rwx ~bsqsn
|
||||
|
||||
Place the jar file where the ``bsqsn`` user can read it and tag it with
|
||||
Bitsquare's version number (to allow running several instances of mutually
|
||||
incompatible versions), e.g. ``~bsqsn/SeedNode-VERSION.jar``. Copy the
|
||||
configuration directory to the ``~bsqsb/.local/share`` directory.
|
||||
|
||||
## Testing the seed node
|
||||
|
||||
You need to check that the seed node can actually run in your system. For
|
||||
instance, if you are using version 0.4.2 and your seed node's Tor address is
|
||||
``1a2b3c4d5e6f7g8h.onion:8000``, try to run this as the ``bsqsn`` user:
|
||||
|
||||
$ java -jar ~bsqsn/SeedNode-0.4.2.jar 1a2b3c4d5e6f7g8h.onion:8000 0 50
|
||||
|
||||
Please check error messages if it fails to run. Do note that you will need
|
||||
OpenJDK and OpenJFX in the server. In Debian-like systems you may install the
|
||||
needed dependencies with:
|
||||
|
||||
# apt-get --no-install-recommends install openjfx
|
||||
|
||||
After the node runs successfully, interrupt it with Control-C.
|
||||
|
||||
## Init script
|
||||
|
||||
To allow the daemon to start automatically on system boot, use the attached
|
||||
[init script](bitsquare-sn.init.sh). First edit it and change its
|
||||
configuration variables to your needs, especially ``SN_ADDRESS``, ``SN_JAR``
|
||||
and ``SN_USER``. In the previous example, the values would be:
|
||||
|
||||
SN_ADDRESS=1a2b3c4d5e6f7g8h.onion:8000
|
||||
SN_JAR=~bsqsn/SeedNode-0.4.2.jar
|
||||
SN_USER=bsqsn
|
||||
|
||||
Put the customized script under ``/etc/init.d`` using a name without
|
||||
extensions (e.g. ``bitsquare-sn``), make it executable, add it to the boot
|
||||
sequence and finally start it:
|
||||
|
||||
# cp /path/to/bitsquare-sn.init.sh /etc/init.d/bitsquare-sn
|
||||
# chmod a+rx /etc/init.d/bitsquare-sn
|
||||
# update-rc.d bitsquare-sn defaults
|
||||
# service bitsquare-sn start
|
||||
|
||||
Executing ``service bitsquare-sn status`` should report that the process is
|
||||
running.
|
||||
|
||||
## Cron script
|
||||
|
||||
The attached [Cron script](bitsquare-sn.cron.sh) can be used to check the seed
|
||||
node daemon periodically and restart it if it is using too much memory (RSS at
|
||||
the time, may change to VSS later).
|
||||
|
||||
To enable this check, edit the script and change the ``MAX_RSS_MiB`` to
|
||||
whatever limit (in MiB), copy it to ``/etc/cron.hourly`` and make it
|
||||
executable:
|
||||
|
||||
# cp /path/to/bitsquare-sn.cron.sh /etc/cron.hourly/bitsquare-sn
|
||||
# chmod a+rx /etc/cron.hourly/bitsquare-sn
|
||||
|
||||
The check will be run every hour. For more sophisticated checks, use a proper
|
||||
monitor like [Monit](https://mmonit.com/monit/).
|
Loading…
Reference in New Issue
Block a user