Jump to content

Recommended Posts

Помогите настроить автостарт xmail при перезагрузке роутера.

Понмаю, что тупой вопрос на знание Unix, но что-то не смог разобраться.

xmail установлен, настроен, "ручками" запускается и работает.

Долго искал - нашел вроде способ переписать в /opt/etc/init.d скрипт запуска xmail, переименовав его в S37xmail.

Но при перезапуске - получил неработоспособный рутер и "ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: timed out." в логах,  

Созданный файлик стёр, перезагрузился - всё ОК, но без xmail, естествнно.

Что мне нужно сделать, чтобы прописать автозапуск корректно?

Link to comment
Share on other sites

3 часа назад, HuduGuru сказал:

Что мне нужно сделать, чтобы прописать автозапуск корректно?

Что у вас в самом скрипте автозапуска xmail вы не показали (по-умолчанию его в самом пакете нет).

Протестировать вручную автоматический запуск программы можно с параметром start или stop (остановка). Например:

# S37xmail start

Если скрипт не отрабатывает нормально, то и роутер при перезапуске не сможет его запустить.

Простой пример скрипта автозапуска выглядит так:

Скрытый текст

#!/bin/sh

PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

start() {
        /opt/bin/prog_name
        }

stop() {
        killall prog_name
        }

case $1 in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            stop
            start
            ;;
        *)
            echo "Usage: $0 {start|stop|restart}"
            ;;
esac

 

Но это не совсем правильный вариант написания подобных скриптов для entware, но в простейших случаях сгодится.

Link to comment
Share on other sites

По умолчанию есть скрипт не автозапуска, но просто запуска.

Файл xmail, его и копировал в init.d:
 

Скрытый текст

 

#!/bin/sh
#
# skeleton example file to build /etc/init.d/ scripts.
#  This file should be used to construct scripts for /etc/init.d.
#
#  Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#  Modified by Davide Libenzi <davidel@xmailserver.org>
#
# Version: @(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl
#

XMAIL_ROOT=/opt/var/MailRoot
XMAIL_CMD_LINE="-SX 1 -Qn 1 -Yt 1 -Ln 1 -PX 1 -CX 1"
PATH=$XMAIL_ROOT/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/bin/XMail
NAME=XMail
DESC="XMail Server"

test -f $DAEMON || exit 0

set -e
ulimit -c 10000
ulimit -s 128

start_xmail()
{
    MAIL_ROOT=$XMAIL_ROOT
    export MAIL_ROOT
    MAIL_CMD_LINE=$XMAIL_CMD_LINE
    export MAIL_CMD_LINE
    /opt/bin/rm -f /opt/var/run/$NAME.pid
    $DAEMON
    while [ ! -f /opt/var/run/$NAME.pid ]
    do
        /opt/bin/sleep 1
    done
}

stop_xmail()
{
    if [ -f /opt/var/run/$NAME.pid ]
    then
        echo `date` > $XMAIL_ROOT/.shutdown
        kill -INT `cat /opt/var/run/$NAME.pid`
        while [ -f $XMAIL_ROOT/.shutdown ]
        do
            /opt/bin/sleep 1
        done
    fi
}


case "$1" in
  start)
      echo -n "Starting $DESC: "
      start_xmail
      echo "$NAME.[" `cat /opt/var/run/$NAME.pid` "]"
 ;;
  stop)
      echo -n "Stopping $DESC: "
      stop_xmail
      echo "$NAME."
 ;;
  #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 \
 # /opt/var/run/$NAME.pid --exec $DAEMON
  #;;
  restart|force-reload)
 #
 # 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: "
 stop_xmail
 /opt/bin/sleep 1
 start_xmail
        echo "$NAME.[" `cat /opt/var/run/$NAME.pid` "]" 
 ;;
  *)
 N=/etc/init.d/$NAME
 # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
 echo "Usage: $N {start|stop|restart|force-reload}" >&2
 exit 1
 ;;
esac

exit 0

 

 

Link to comment
Share on other sites

1 час назад, HuduGuru сказал:

По умолчанию есть скрипт не автозапуска, но просто запуска.

Если его запустить вручную так, то все нормально отрабатывает?:

/etc/init.d/S37xmail start

Если да, то, возможно, запуск xmail при загрузке роутера не укладывается в какие-то таймауты. Соответственно, и возникает ошибка...

И я бы подкорректировал строчку PATH, добавив в конце ":/opt/bin":

PATH=$XMAIL_ROOT/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin

Edited by gvan
Link to comment
Share on other sites

15 часов назад, gvan сказал:

Спасибо, разобрался.

Засада была в while [ ! -f /opt/var/run/$NAME.pid ]. Xmail по умолчанию пишет свой PID в /var/run/, а не в /opt//var/run/.

Почитал документацию, добавил в файлик

XMAIL_PID_DIR=/opt/var/run
export XMAIL_PID_DIR

Всё заработало.

 

Link to comment
Share on other sites

  • 5 years later...

как исправить Socket bind error? подскажите пожалуйста.

поставил opkg install xmail. распаковал /opt/etc/MailRoot.tar.bz2. переименовал файл xmail в S43xmail, и немого поправил.

Скрытый текст
#!/bin/sh
#
#skeleton	example file to build /opt/etc/init.d/ scripts.
#This file should be used to construct scripts for /opt/etc/init.d.
#
#Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#Modified by Davide Libenzi <davidel@xmailserver.org>
#
#Version:	@(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl
#

XMAIL_ROOT=/opt/var/lib/xmail/MailRoot
XMAIL_CMD_LINE="-SX 1 -Qn 1 -Yt 1 -Ln 1 -PX 1 -CX 1"
PATH=$XMAIL_ROOT/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/opt/sbin:/opt/bin
DAEMON=/opt/bin/XMail
NAME=XMail
DESC="XMail Server"

test -f $DAEMON || exit 0

set -e
ulimit -c 10000
ulimit -s 128

start_xmail()
{
    MAIL_ROOT=$XMAIL_ROOT
    export MAIL_ROOT
    MAIL_CMD_LINE=$XMAIL_CMD_LINE
    export MAIL_CMD_LINE
    XMAIL_PID_DIR=/opt/var/run
    export XMAIL_PID_DIR
    rm -f /opt/var/run/$NAME.pid
    $DAEMON
    while [ ! -f /opt/var/run/$NAME.pid ]
    do
        sleep 1
    done
}

stop_xmail()
{
    if [ -f /opt/var/run/$NAME.pid ]
    then
        echo `date` > $XMAIL_ROOT/.shutdown
        kill -INT `cat /opt/var/run/$NAME.pid`
        while [ -f $XMAIL_ROOT/.shutdown ]
        do
            sleep 1
        done
    fi
}


case "$1" in
  start)
      echo -n "Starting $DESC: "
      start_xmail
      echo "$NAME.[" `cat /opt/var/run/$NAME.pid` "]"
	;;
  stop)
      echo -n "Stopping $DESC: "
      stop_xmail
      echo "$NAME."
	;;
  #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 \
	#	/opt/var/run/$NAME.pid --exec $DAEMON
  #;;
  restart|force-reload)
	#
	#	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: "
	stop_xmail
	sleep 1
	start_xmail
        echo "$NAME.[" `cat /opt/var/run/$NAME.pid` "]"
	;;
  *)
	N=/opt/etc/init.d/$NAME
	# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
	echo "Usage: $N {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...