Bitcoin Forum
November 11, 2024, 05:25:26 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Sample startup script for linux?  (Read 9045 times)
SgtSpike (OP)
Legendary
*
Offline Offline

Activity: 1400
Merit: 1005



View Profile
April 15, 2012, 04:46:27 AM
 #1

I'm looking for a sample startup script for bitcoind to put in my linux debian install.  As I understand it, I'll need a script to drop in the /etc/init.d/ folder.  I've never written a script for such a purpose, and the instructions I've seen online are... confusing, at best.

Is there a sample script somewhere for automatically starting up bitcoind when the server starts up?  Or would someone mind writing one for those who need it?
DILLIGAF
Full Member
***
Offline Offline

Activity: 196
Merit: 100



View Profile
April 15, 2012, 05:20:55 AM
 #2

I'm looking for a sample startup script for bitcoind to put in my linux debian install.  As I understand it, I'll need a script to drop in the /etc/init.d/ folder.  I've never written a script for such a purpose, and the instructions I've seen online are... confusing, at best.

Is there a sample script somewhere for automatically starting up bitcoind when the server starts up?  Or would someone mind writing one for those who need it?

If the file /etc/init.d/bootmisc.sh is still there then as long bitcoind is in the path put the following in the file or if not in path then the full path to the file would need to be used.

Code:
## Starting then backrounding the bitcoind.
bitcoind &

Otherwise you can put it in another file in the init.d directory but this should be the only one that would not be touched on upgrade of the package that would contain the other file or it used to be that way when I used Debian. Or to do the script if I remember it correctly create file /etc/init.d/bitcoind.sh with this for contents.

Code:
#!/bin/bash
## Starting then backrounding the bitcoind.
bitcoind &

The as root to have it create the proper links.

Code:
update-rc.d bitcoind.sh defaults

Edit: and now I read it again you will want it executable so as root.

Code:
chmod +x /etc/init.d/bootmisc.sh
arby
Donator
Member
*
Offline Offline

Activity: 112
Merit: 10


keybase.io/arblarg


View Profile
April 21, 2012, 07:20:56 PM
Last edit: April 21, 2012, 07:35:11 PM by packet7
 #3

On this website you can find more info about it:

http://bealers.com/2012/01/installing-bitcoin-on-debian-squeeze/

Its a detailed script which you need to put in /etc/init.d/, as stated above.

(see Step 3 - Install start-up & config scripts)

The above script would work, but if the executable bitcoind is not within your PATH variable, for example you put it in /home/bitcoind/bin/bitcoind, or some other place it will not work.
That was mentioned, but well, its better to give a detailed example.

Also the script above will not work in case you want to stop the bitcoind

And another suggestion it would be to use the "-d" arguments when executing the comand, so the script will not hang.

So in the script on my link below under:

DAEMON=/usr/bin/$NAME

You will need to add DAEMON_ARGS="-d" (I already added that)

Also for the script to work you need the bitcoind in the /usr/bin/ directory, so if its not there, go to the directory where it is, and as root:

cp bitcoind /usr/bin/

If you are not running bitcoind as root, you need to modify the CHUID variable.

-----------------------------------------------------

Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          bitcoind
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: bitcoind daemon startup script
# Description:       bitcoind daemon startup script
### END INIT INFO

# Author: Pavel A. Karoukin
#

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="BitCoin Daemon"
NAME=bitcoind
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CHUID=root:root

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
      || return 1
   start-stop-daemon --start --quiet --chuid $CHUID --pidfile $PIDFILE --exec $DAEMON -- \
      $DAEMON_ARGS \
      || return 2
}

#
# Function that stops the daemon/serv
do_stop()
{
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred
   $DAEMON stop
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME

   RETVAL="$?"
   [ "$RETVAL" = 2 ] && return 2
   # Wait for children to finish too if this is a daemon that forks
   # and if the daemon is only ever run from this initscript.
   # If the above conditions are not satisfied then add some other code
   # that waits for the process to drop all resources that could be
   # needed by services started subsequently.  A last resort is to
   # sleep for some time.
   start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
   [ "$?" = 2 ] && return 2
   # Many daemons don't delete their pidfiles when they exit.
   rm -f $PIDFILE
   return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
   #
   # If the daemon can reload its configuration without
   # restarting (for example, when it is sent a SIGHUP),
   # then implement that here.
   #
   start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
   return 0
}

case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  #reload|force-reload)
   #
   # If do_reload() is not implemented then leave this commented out
   # and leave 'force-reload' as an alias for 'restart'.
   #
   #log_daemon_msg "Reloading $DESC" "$NAME"
   #do_reload
   #log_end_msg $?
   #;;
  restart|force-reload)
   #
   # If the "reload" option is implemented then remove the
   # 'force-reload' alias
   #
   log_daemon_msg "Restarting $DESC" "$NAME"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
        # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac

:

So basically a step by step would be like this:

1. open the editor and paste the script in it
Code:
nano /etc/init.d/bitcoind
2. save the script using ctrl+x to exit the editor
Code:
Ctrl+X
3. make the script executable using the chmod command
Code:
chmod +x /etc/init.d/bitcoind
4. add the script to the startup
Code:
update-rc.d bitcoind.sh defaults
5. test the script
Code:
/etc/init.d/bitcoind start
ps -ef | grep bitcoind
/etc/init.d/bitcoind stop
ps -ef | grep bitcoind

Jabber/XMPP: arby@darkness.su
SgtSpike (OP)
Legendary
*
Offline Offline

Activity: 1400
Merit: 1005



View Profile
April 22, 2012, 05:21:39 AM
 #4

Thanks for the responses both of you.

I actually got it to work by putting "bitcoind -daemon" at the end of the rc.local file in /etc/init.d/... is that a bad way of going about it?  If so, I'll give packet's script a try.
arby
Donator
Member
*
Offline Offline

Activity: 112
Merit: 10


keybase.io/arblarg


View Profile
April 22, 2012, 05:35:33 AM
 #5

Hello,

Well, if it works, no problem with that, but its not the 'proper' way to do it.

(e.g. you install a new bitcoind version in a new location, and the rc.local script will start the old one because its the first in the path)

I would say leave it for now as it is, but a tip for the future:

When using linux you need to develop a habit of doing things the proper way, because there are so many things you will forget, and google will be your only friend when you do.
If the things are done 'proper' you can follow easily the same steps to fix them.

Thanks for the responses both of you.

I actually got it to work by putting "bitcoind -daemon" at the end of the rc.local file in /etc/init.d/... is that a bad way of going about it?  If so, I'll give packet's script a try.

Jabber/XMPP: arby@darkness.su
SgtSpike (OP)
Legendary
*
Offline Offline

Activity: 1400
Merit: 1005



View Profile
April 23, 2012, 03:27:07 PM
 #6

Makes sense, thanks for the response packet7.  I'll change it around when I get the change.  Wink
DILLIGAF
Full Member
***
Offline Offline

Activity: 196
Merit: 100



View Profile
April 24, 2012, 07:25:43 PM
 #7

Makes sense, thanks for the response packet7.  I'll change it around when I get the change.  Wink

Not really rc.local sounds like it would be the spot to put it just like /usr/local/bin is the spot to put your user binaries in the case of the latter any newly installed binary will overwrite the old so your script would continue to work starting the new binary.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!