M
M
Mikhail Blokhin2019-01-09 15:48:32
System administration
Mikhail Blokhin, 2019-01-09 15:48:32

How to delay the start of a service on Raspbian?

Good afternoon, dear Toaster users.
I have a Raspberry Pi 3 B+ with Raspbian installed and a white static address behind the router. I need to use the microcomputer as a SOCKS5 proxy server. I installed and configured Danted, enabled its autorun, but after rebooting the system, sudo systemctl status dantedI get an error when I run it:

Mistake
15:36:47 raspberrypi systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)...
янв 09 15:36:47 raspberrypi danted[385]: Jan  9 15:36:47 (1547037407.546203) danted[385]: warning: int_ifname2sockaddr(): interface "eth0" has no usable IP-addresses configured
янв 09 15:36:47 raspberrypi danted[385]: Jan  9 15:36:47 (1547037407.551843) danted[385]: error: /etc/danted.conf: problem on line 6 near token "eth0": could not resolve hostname "eth0": Temporary failure in name resolution.  
янв 09 15:36:47 raspberrypi danted[385]: Jan  9 15:36:47 (1547037407.551956) danted[385]: alert: mother[1/1]: shutting down
янв 09 15:36:47 raspberrypi systemd[1]: danted.service: Control process exited, code=exited status=1
янв 09 15:36:47 raspberrypi systemd[1]: Failed to start SOCKS (v4 and v5) proxy daemon (danted).
янв 09 15:36:47 raspberrypi systemd[1]: danted.service: Unit entered failed state.
янв 09 15:36:47 raspberrypi systemd[1]: danted.service: Failed with result 'exit-code'.

If after that you execute sudo systemctl restart danted, then the service starts up and works fine.
As I understand it, the error happens due to the fact that Danted starts up faster than the interface on Malinka rises. I tried adding the parameter sleep 30, but it did not give the desired effect: after rebooting the system, the error is still there.
I'm attaching the config code:
/etc/danted.conf
# $Id: sockd.conf,v 1.52.10.2 2014/09/03 14:49:13 michaels Exp $

logoutput: stderr

internal: 0.0.0.0 port = 7777
external: eth0
socksmethod: username
user.privileged: root
user.unprivileged: nobody

client pass {
       from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
       log: error
       socksmethod: username
}



socks pass {
       from: 0.0.0.0/0 to: 0.0.0.0/0
       command: bind connect udpassociate
       log: error
       socksmethod: username
}

socks pass {
       from: 0.0.0.0/0 to: 0.0.0.0/0
       command: bindreply udpreply
       log: error
}
/etc/init.d/danted
#! /bin/sh
### BEGIN INIT INFO
# Provides:          danted
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: SOCKS (v4 and v5) proxy daemon (danted)
# Description:       Starts or stops the Dante SOCKS proxy daemon.
#                    Its configuration is stored in the /etc/danted.conf file;
#                    see the danted.conf(5) manual page for details.
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version:	@(#)skeleton  1.8  03-Mar-1998  [email protected]

. /lib/lsb/init-functions

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/danted
NAME=danted
DESC="Dante SOCKS daemon"
PIDFILE=/var/run/$NAME.pid
CONFFILE=/etc/$NAME.conf


test -f $DAEMON || exit 0

set -e

# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
 sleep 30
 if [ -r $CONFFILE ]; then
    uid="`sed -n -e 's///g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`"
    if [ -n "$uid" ]; then
      touch $PIDFILE
      chown $uid $PIDFILE
    fi
  fi
}
    
case "$1" in
  start)
  if ! egrep -cve '^ *(#|$)' \
      -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
      $CONFFILE > /dev/null
  then
    echo "Not starting $DESC: not configured."
    exit 0
  fi
  echo -n "Starting $DESC: "
        <b>sleep 30</b>
  touch_pidfile
  start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE \
    --exec $DAEMON -- -D
  echo "$NAME."
  ;;
  stop)
  echo -n "Stopping $DESC: "
  start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \
    --exec $DAEMON
  echo "$NAME."
  ;;
  reload|force-reload)
  #
  #	If the daemon can reload its config files on the fly
  #	for example by sending it SIGHUP, do it here.
  #
  #	If the daemon responds to changes in its config file
  #	directly anyway, make this a do-nothing entry.
  #
   echo "Reloading $DESC configuration files."
   start-stop-daemon --stop --signal 1 --quiet --pidfile \
    $PIDFILE --exec $DAEMON -- -D
  ;;
  restart)
  #
  #	If the "reload" option is implemented, move the "force-reload"
  #	option to the "reload" entry above. If not, "force-reload" is
  #	just the same as "restart".
  #
  echo -n "Restarting $DESC: "
  start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
  sleep 1
  touch_pidfile
  start-stop-daemon --start --quiet --pidfile $PIDFILE \
    --exec $DAEMON -- -D
  echo "$NAME."
  ;;
  status)
  if ! egrep -cve '^ *(#|$)' \
      -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
      $CONFFILE > /dev/null
  then
    configured=''
  else
    configured='1'
  fi
  if start-stop-daemon --status --quiet --pidfile $PIDFILE \
    --exec $DAEMON; then
    if [ -n "$configured" ]; then
      echo "$DESC running"
    else
      echo "$DESC running, yet not configured?!"
    fi
  else
    if [ -n "$configured" ]; then
      echo "$DESC not running"
    else
      echo "$DESC not configured"
    fi
  fi
  ;;
  *)
  N=/etc/init.d/$NAME
  # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
  echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
  exit 1
  ;;
esac

exit 0

I will be grateful for help. Thanks in advance!

Answer the question

In order to leave comments, you need to log in

2 answer(s)
D
Dmitry Shitskov, 2019-01-09
@mishablokhin

Find where you have the current config for Systemd - the file sockd.service
And try to change and add the lines

After=network-online.target
Wants=network-online.target

//dhcp was enabled. Dante was running before receiving the address. It's better to set up static.

M
Michael, 2019-01-09
@MikeDeblin

Try adding to /etc/init.d/danted
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question