Задать вопрос
@mishablokhin
Работаю системным администратором

Как отсрочить запуск сервиса на Raspbian?

Добрый день, уважаемые пользователи Тостера.
Имеется Raspberry Pi 3 B+ с установленной Raspbian и белым статическим адресом за маршрутизатором. Мне необходимо использовать микрокомпьютер как SOCKS5 прокси сервер. Установил и сконфигурировал Danted, включил его автозапуск, но после перезагрузки системы при выполнении sudo systemctl status danted получаю ошибку:
Ошибка
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'.

Если после этого выполнить sudo systemctl restart danted, то сервис прекрасно запускается и работает.
Как я понял, ошибка случается из-за того, что Danted запускается быстрее, чем поднимается интерфейс на Малинке. Я попробовал добавить параметр sleep 30, но это не дало желаемого эффекта: после перезагрузки системы по-прежнему ошибка.
Код конфигов прикрепляю:
/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  miquels@cistron.nl

. /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/[[:space:]]//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

Буду благодарен за помощь. Заранее спасибо!
  • Вопрос задан
  • 308 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия C++ разработчик
    11 месяцев
    Далее
  • Stepik
    Основы работы в консоли Linux, настройка сетевых служб (кластер)
    1 неделя
    Далее
  • Слёрм
    Linux для разработчиков
    2 недели
    Далее
Решения вопроса 1
Найдите где у вас действующий конфиг для Systemd - файл sockd.service
И попробуйте изменить и добавить строки
After=network-online.target
Wants=network-online.target


//Был включен dhcp. Dante запускался до получения адресом. Лучше настроить статику.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Principal Recruitment Москва
от 200 000 до 250 000 ₽
Principal Recruitment Москва
от 200 000 до 350 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽