HuduGuru Posted October 28, 2016 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
gvan Posted October 28, 2016 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
HuduGuru Posted October 29, 2016 Author 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
gvan Posted October 29, 2016 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
HuduGuru Posted October 30, 2016 Author 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
Meccep45 Posted February 28, 2022 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
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.