Page 3 of 4 FirstFirst 1234 LastLast
Results 31 to 45 of 50

Thread: Шаблон скриптов инициализации init.d

  1. #31
    Join Date
    Feb 2008
    Location
    Moscow, Tver
    Posts
    3,962
    Quote Originally Posted by Heavy View Post
    тогда какой смысл от syslog-ng, если он запустится только после монтирования всех устройств? Надо же видеть лог загрузки системы,а не лог того, что после загрузки.Ну, например надо видеть как монтируются устройства, как запускается самба, и т.п. Че за бред...? Какой тогда смысл менять стандартный логгер на этот?
    Читаем внимательно скрипт запуска syslog-ng, чтобы понять, что до его старта работает стандартный syslog, лог которого потом обрабатывается и копируется в syslog-ng.log

  2. #32

    не запускается самба из init.d

    поставил самбу2

    она прописалась в /opt/etc/init.d/S80samba

    подскажите - почему она после перезапуска не стартует, ведь вроде бы файлы из init.d должны срабатывать как автозапускаемые службы.

    подскажите как поправить?

  3. #33
    Файл выполняемый?
    Code:
    chmod +x /opt/etc/init.d/S80samba

  4. #34
    Мой вариант скриптов начального запуска процессов. За основу взял идею djet

    rc.inslug:
    PHP Code:
    #!/bin/sh

    # Start/stop all init scripts in /opt/etc/init.d including symlinks
    # starting them in numerical order and
    # stopping them in reverse numerical order
    if [ $# = 0 ]; then
        
    printf "Usage: $0 {start|stop|restart}\n" >&2
        
    exit 1
    fi

    ACTION
    =$1
    DAEMONSDIR
    ="`/usr/bin/dirname $0`/"
    $ACTION stop -o $ACTION restart ] && ORDER="-r"
    DAEMONS=`/opt/bin/find $DAEMONSDIR -perm '-u+x' -name 'S??*' | sort $ORDER`

    for 
    i in $DAEMONS; do
        
    # Ignore dangling symlinks (if any).
        
    [ ! -"$i] && continue

            case 
    "$iin
            
    *.sh )
                (
                    
    # Source shell script for speed.
                    
    trap INT QUIT TSTP
                    set $ACTION
                    
    $i
                
    )
                ;;
            *)
                    
    # No sh extension, so fork subprocess.
                    
    $i $ACTION
                    
    ;;
        
    esac
    done 
    rc.func:
    PHP Code:
    #!/bin/sh
    ansi_red="\033[1;31m";
    ansi_green="\033[1;32m";
    ansi_yellow="\033[1;33m";
    ansi_white="\033[1;37m";
    ansi_blue="\033[1;34m";

    ansi_bell="\007";
    ansi_blink="\033[5m";
    ansi_std="\033[m";
    ansi_rev="\033[7m";
    ansi_ul="\033[4m";

    PrintMsg() {
        case 
    "$2" in
            1
    msgtext=${ansi_green}${1}${ansi_std};;
            
    2msgtext=${ansi_yellow}${1}${ansi_std};;
            
    3msgtext=${ansi_red}${1}${ansi_std};;
            *) 
    msgtext=${1};;
        
    esac
        
    echo --"$msgtext"
    }
    # Check if $pid are running
    checkpid() {
        while [ -
    "$1" ]; do
           [ -
    /proc/$] && return 0
           shift
        done
        
    return 1
    }
    #
    WaitUntilRun() {
        
    COUNTER=0LIMIT=10
        
    while checkpid $&& [ "$COUNTER-le "$LIMIT]; do
            
    sleep 1s;
            
    COUNTER=`expr $COUNTER + 1`
        
    done
    }
    #
    WaitUntilDown() {
        
    proc=$; [ -"$proc] && proc=$PROC
        COUNTER
    =0
        LIMIT
    =10
        
    while [ -"`pidof $proc`" -"$COUNTER-le "$LIMIT]; do
            
    sleep 1s;
            
    COUNTER=`expr $COUNTER + 1`
        
    done
    }

    # A function to find the pid of a program.
    pidofproc() {
        
    # Test syntax.
        
    if [ "$#" ] ; then
            
    echo "Usage: pidofproc {program}"
            
    return 1
        fi
        pid
    =0
        proc
    ="`basename $1`"
        
    if [ -"$PIDFILE] && [ -f $PIDFILE ] ; then
            pid
    =`cat $PIDFILE`
        
    elif [ -/var/run/${proc}.pid ] ; then
            pid
    =`cat /var/run/${proc}.pid`
        
    fi
        
    if [ -"$pid] && [ -/proc/$pid ] ; then
            
    echo $pid
            
    return 0
        fi
        
    # Next try "pidof"
        
    pid=`pidof $1` || pid=`pidof $proc`
        echo 
    $pid
        
    return 0
    }
    #
    start() {
        
    res=0
        
    # Test syntax.
        
    if [ "$#" ] ; then
            
    echo "Usage: start {program} [arguments] [prefix command]"
            
    return 1
        fi
        proc
    ="`basename $1`"
        
    PrintMsg "Starting $proc... "
        
    pid=`pidofproc $1`
        [ -
    "$pid] && { PrintMsg "already running. id:$pid\n" 2; return 255;}
            if [ 
    "$#" ]; then
                
    $$$2 2>&| /usr/bin/logger -t $proc
            
    else
                $
    $2 2>&| /usr/bin/logger -t $proc
            fi
            
    #$1 $2 > /dev/null 2>&1
            
    WaitUntilDown $proc
            
    if [ -"`pidof $proc`" ]; then
                    PrintMsg 
    "done.\n" 1
                    logger 
    -t $proc "started"
                    
    res=0
            
    else
                    
    PrintMsg "failed.\n" res=1
            fi
        
    return $res
    }
    #
    stop() {
        
    res=0
        
    # Test syntax.
        
    if [ "$#" ] ; then
            
    echo "Usage: stop {program} [signal]"
            
    return 1
        fi
        proc
    ="`basename $1`"
        
    # Find pid.
        
    pid=`pidofproc $1`
        
    # check for second arg to be kill level
        
    killlevel="$2"
        
    str="Shutting down $proc... "
        
    [ -"$killlevel] && str="Send signal $killlevel to $proc... "
        
    PrintMsg "$str"
        
    # Kill it.
        
    if [ -"$pid]; then
            PrintMsg 
    "already down.\n" ; return 255
        fi
        
    if [ -"$killlevel] ; then
            
    # TERM first, then KILL if not dead
            
    kill -TERM $pid
            usleep 100000
            
    if checkpid $pid && sleep 1 &&
                
    checkpid $pid && sleep 3 &&
                
    checkpid $pid then
                kill 
    -KILL $pid
                usleep 100000
            fi
            
    # use specified level only
        
    else
            
    kill $killlevel $pid
        fi
        WaitUntilRun $pid

        
    if checkpid $pid >/dev/null 2>&1then
            PrintMsg 
    "failed.\n" res=1
        
    else
            
    PrintMsg "done.\n" res=0
            logger 
    -t $proc "stopped"
        
    fi
        
    return $res

    В этом варианте в скриптах запуска S* просто используются функции из rc.func.
    Например,
    S99dc (для microdc2):
    PHP Code:
    #!/bin/sh
    . /opt/etc/init.d/rc.func

    PROC
    =microdc2
    DESC
    ="$PROC"
    PIDFILE=""
    DAEMON="/opt/bin/$PROC"
    ARGS="-c /opt/etc/microdc2/dc.conf"
    PREFIX="/opt/bin/screen -dmS microdc"
    CONFDIR=""

    # installation check
    if [ ! -x $DAEMON ]; then
        
    echo "$DAEMON is not installed"
        
    exit 1
    fi
    #microdc2 features
    OLDHOME=$HOME
    export HOME
    ="/opt/var/microdc"
    export LANG="ru_RU.UTF-8"

    case "$1" in
            start
    )
                    
    start "$DAEMON" "$ARGS" "$PREFIX"
                    
    res=$?
            ;;
            
    stop)
                    
    stop $DAEMON
                    res
    =$?
            ;;
            
    restart|force-reload)
                    
    stop $DAEMON
                    start 
    "$DAEMON" "$ARGS" "$PREFIX"
                    
    res=$?
            ;;
            *)
                    echo 
    "Usage: $0 {start|stop|restart}" ; exit 1
            
    ;;
    esac
    export HOME
    =$OLDHOME
    exit $res 
    При специфических особенностях запуска/останова сервиса в скриптах S* дописываются свои функции. Например, при остановке xinetd, нужно остановить также и сервера.
    S10xinetd.sh:
    PHP Code:
    #!/bin/sh

    . /opt/etc/init.d/rc.func
    PROC
    =xinetd
    DESC
    ="xinetd"
    PIDFILE="/var/run/xinetd.pid"
    DAEMON="/opt/sbin/$PROC"
    ARGS="-f /opt/etc/xinetd.conf -pidfile $PIDFILE"
    CONFDIR="/opt/etc/xinetd.d/"
    #
    xinetd_stop() {
            
    stop $DAEMON -SIGTERM
            res
    =$?
            for 
    i in ${CONFDIR}* ; do
                    if [ -
    "`grep "^[[:space:]]*disable[[:space:]]*=[[:space:]]*no${i}`" ] ; then
                            
    for j in `awk -F= '/^[[:space:]]*server[[:space:]]*=[[:space:]]*.*/{ print $2 }' ${i} | sort -u`; do
                                    
    d="`basename $j`"
                                    
    [ -"`pidof $d`" ] || continue
                                    
    stop $j
                                    res
    =$?
                            
    done
                    fi
            done
            
    return $res
    }
    #
    xinetd_reconfig() {
            
    PrintMsg "Reconfigure $PROC... "
            
    pid=`pidofproc $DAEMON`
            [ -
    "$pid] || { PrintMsg "not running.\n" ; return 255;}
            
    kill -SIGHUP $pid
            sleep 1
            
    if [ -/proc/$pid ]; then
                    PrintMsg 
    "done.\n" 1
                    logger 
    -t $PROC "reconfigured"
                    
    return 0
            
    else
                    
    PrintMsg "failed.\n" ; return 1
            fi
    }
    # installation check
    if [ ! -x $DAEMON ]; then
            
    echo "$DAEMON is not installed"
            
    exit 1
    fi
    case "$1" in
            start
    )
                    
    start "$DAEMON" "$ARGSres=$?
            ;;
            
    stop)
                    
    xinetd_stop res=$?
            ;;
            
    reload|reconfig)
                    
    xinetd_reconfig res=$?
            ;;
            
    restart|force-reload)
                    
    xinetd_stop res=$?
                    
    start "$DAEMON" "$ARGS"
            
    ;;
            *)
                    echo 
    "Usage: $0 {start|stop|reconfig|restart}" res=1
            
    ;;
    esac
    exit $res 
    Ну и до кучи
    S10cron (для встроенного crond):
    PHP Code:
    #!/bin/sh
    . /etc/init.d/rc.func
    PROC
    =crond
    DESC
    ="$PROC"
    PIDFILE=""
    DAEMON="/usr/sbin/$PROC"
    CONFDIR="/etc/crontabs/"
    ARGS="-L /var/log/cron -c $CONFDIR"

    crond_reconfig() {
            
    PrintMsg "Reconfigure $PROC... "
            
    pid=`pidofproc $DAEMON`
            [ -
    "$pid] || { PrintMsg "not running.\n" ; return 255;}
            echo 
    "admin" >> ${CONFDIR}cron.update
            sleep 1
            
    if [ -/proc/$pid ]; then
                    PrintMsg 
    "done.\n" 1
                    logger 
    -t $PROC "reconfigured"
                    
    return 0
            
    else
                    
    PrintMsg "failed.\n" ; return 1
            fi
    }

    case 
    "$1" in
            start
    )
                    
    start "$DAEMON" "$ARGS"
                    
    res=$?
            ;;
            
    stop)
                    
    stop "$DAEMON"
                    
    res=$?
            ;;
            
    reload|reconfig)
                    
    crond_reconfig res=$?
            ;;
            
    restart|force-reload)
                    
    stop "$DAEMON"
                    
    start "$DAEMON" "$ARGS"
                    
    res=$?
            ;;
            *)
                    echo 
    "Usage: $0 {start|stop|reconfig|restart}" ; exit 1
            
    ;;
    esac
    exit $res 

  5. #35
    Join Date
    Sep 2005
    Posts
    445
    Quote Originally Posted by djet View Post
    Применение:
    • реконфигурация выбранных служб при изменении сетевых настроек (post-firewall) (пока никак не реализовано)

    А что с данным вопросом????
    Хочется запускать службу и правила iptables
    Last edited by Wolfgun; 22-06-2009 at 12:28.

  6. #36
    По какой причине может возникать ошибка при попытке ручного запуска/стопа S-скриптов?
    Code:
    [root@WL init.d]$ S97Samba stop
    -sh: S97Samba: not found
    [root@WL init.d]$
    (Файл S97Samba ессно-но есть и он запускаемый)
    При этом автозагрузка всех скриптов работает.
    RT-N65U 3.0.3.8-081 (Padavan).
    WL500gp V1 128 MB. 1.9.2.7-rtn-r4330.

  7. #37
    Quote Originally Posted by Rucha View Post
    По какой причине может возникать ошибка при попытке ручного запуска/стопа S-скриптов?
    Code:
    [root@WL init.d]$ S97Samba stop
    -sh: S97Samba: not found
    [root@WL init.d]$
    (Файл S97Samba ессно-но есть и он запускаемый)
    При этом автозагрузка всех скриптов работает.
    это вам не windows
    [root@WL init.d]$ ./S97Samba stop

  8. Question

    Quote Originally Posted by Oleg View Post
    Нет inittab, поскольку init здесь не простой, а золотой. Т.е. написан специально для роутера и делает, что ему нужно.
    понимаю, что тема стара, но где можно почитать о процессе запуска роутера? Что конкретно init делает при загрузке?
    спасибо.

  9. #39
    Quote Originally Posted by mc-sim View Post
    понимаю, что тема стара, но где можно почитать о процессе запуска роутера? Что конкретно init делает при загрузке?
    спасибо.
    Исходники )
    Sorry for my bad English.
    Покупайте Отечественных Слонов!!!

  10. #40
    Quote Originally Posted by mc-sim View Post
    понимаю, что тема стара, но где можно почитать о процессе запуска роутера? Что конкретно init делает при загрузке?
    спасибо.
    Самый простой способ понять что происходит при загрузке это скачать исходники прошивки и изучить их ... Блин FilimoniC уже сказал...
    А вообще если чисто академический интерес, то исходники. Если нужно решение конкретной задачи, то опиши может есть решение не залезая в подноготную

  11. #41
    Quote Originally Posted by mc-sim View Post
    Что конкретно init делает при загрузке?
    А вы с какой целью интересуетесь? Может вам стоит почитать про post-boot, post-firewall и т.п.?
    ASUS RT-N16 1.9.2.7-rtn, Zotac ZBOX (rtorrent@Ubuntu 13.10)

  12. Quote Originally Posted by FilimoniC View Post
    Исходники )
    К сожалению, в "С" не силен
    А вообще если чисто академический интерес, то исходники. Если нужно решение конкретной задачи, то опиши может есть решение не залезая в подноготную
    Собственно, вопрос более академический, нежели связан с какой-то проблемой... Хочется понять процесс загрузки пошагово... В обычном линухе, там все можно разобрать по косточкам, начиная с /etc/inittab, а тут бы хотелось понять что да как...
    А вы с какой целью интересуетесь? Может вам стоит почитать про post-boot, post-firewall и т.п.?
    про них уже читал
    вот тут хотошо написано http://wiki.vectormm.net/index.php/К...льские_скрипты

  13. например согласно инструкции: http://wl500g.info/showthread.php?t=3171
    чтобы работал SSH сервер dropbear, его необходимо прописать его в /usr/local/sbin/post-boot, но по умолчанию, в прошивке 1.9.2.7-rtn-r2274 на RT-N16 нет данного файла, но SSH тем не менее настраивается через веб морду и работает. Вот и интересно, кто и как и по каким конфигам его запускает...

  14. #44
    Quote Originally Posted by mc-sim View Post
    К сожалению, в "С" не силен
    Собственно, вопрос более академический, нежели связан с какой-то проблемой... Хочется понять процесс загрузки пошагово... В обычном линухе, там все можно разобрать по косточкам, начиная с /etc/inittab, а тут бы хотелось понять что да как...
    Исходники прошивки не всегда в "С"... Прошивка это совокупность всего, что в нее включено (скомпилированный исходник кода, включенные файлы конфигураций, etc ...) Попробуй скачать скачать и посмотреть ... скрипты они и в Африке скрипты ... Может поможет ...
    З.Ы. Хотя, не зная основ, зачем академический интерес ???

  15. #45
    Quote Originally Posted by mc-sim View Post
    например согласно инструкции: http://wl500g.info/showthread.php?t=3171
    чтобы работал SSH сервер dropbear, его необходимо прописать его в /usr/local/sbin/post-boot, но по умолчанию, в прошивке 1.9.2.7-rtn-r2274 на RT-N16 нет данного файла, но SSH тем не менее настраивается через веб морду и работает. Вот и интересно, кто и как и по каким конфигам его запускает...
    Раньше его делали в ручную, теперь это встроенная функция. И все берет из nvram. Короче понятно (форум читать не желаю, расскажите все заново). Читать FAQ и форум ...

Page 3 of 4 FirstFirst 1234 LastLast

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •