HuduGuru Posted October 28, 2016 Share Posted October 28, 2016 Помогите настроить автостарт xmail при перезагрузке роутера. Понмаю, что тупой вопрос на знание Unix, но что-то не смог разобраться. xmail установлен, настроен, "ручками" запускается и работает. Долго искал - нашел вроде способ переписать в /opt/etc/init.d скрипт запуска xmail, переименовав его в S37xmail. Но при перезапуске - получил неработоспособный рутер и "ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: timed out." в логах, Созданный файлик стёр, перезагрузился - всё ОК, но без xmail, естествнно. Что мне нужно сделать, чтобы прописать автозапуск корректно? Quote Link to comment Share on other sites More sharing options...
gvan Posted October 28, 2016 Share Posted October 28, 2016 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, но в простейших случаях сгодится. Quote Link to comment Share on other sites More sharing options...
HuduGuru Posted October 29, 2016 Author Share Posted October 29, 2016 По умолчанию есть скрипт не автозапуска, но просто запуска. Файл 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 Quote Link to comment Share on other sites More sharing options...
gvan Posted October 29, 2016 Share Posted October 29, 2016 (edited) 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 October 29, 2016 by gvan Quote Link to comment Share on other sites More sharing options...
HuduGuru Posted October 30, 2016 Author Share Posted October 30, 2016 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 Всё заработало. Quote Link to comment Share on other sites More sharing options...
Meccep45 Posted February 28, 2022 Share Posted February 28, 2022 как исправить 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.