Jump to content
Sign in to follow this  
HuduGuru

Запуск Xmail в init.d

Recommended Posts

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

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

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

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

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

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

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

Share this post


Link to post
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, но в простейших случаях сгодится.

Share this post


Link to post
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

 

 

Share this post


Link to post
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

Share this post


Link to post
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

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

 

Share this post


Link to post
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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...