На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Управление процессом загрузки , [автозапуск] [inittab]
      Не вдаваясь в подробности общего механизма загрузки Linux, в данной теме опишу основные пункты, достаточные для достижения конкретных целей.

      теория об init и уровнях выполнения
      Цитата http://lib.ru/unixhelp/init.txt
      Ядро инициализирует себя и после этого запускает процесс init. А init - все остальные процессы, программы, которые необходимы для нормального функционирования операционной системы. Все дальнейшие действия в системе определяются этим процессом. Все, что нужно делать init-у, определяет специальная таблица.
      Цитата http://www.linuxcenter.ru/lib/books/kostromin/gl_08_02.phtml
      Список этих операций зависит от так называемого уровня выполнения (run level). Уровень выполнения определяет перечень действий, выполняемых процессом init, и состояние системы после загрузки, т. е. конфигурацию запущенных процессов. Уровень выполнения идентифицируется одним символом. В ОС Linux существует несколько основных уровней выполнения:
      0 — остановка системы;
      1 — однопользовательский режим (для специальных случаев администрирования);
      2 — многопользовательский режим без NFS (то же, что и 3, если компьютер не работает с сетью);
      3 — полный многопользовательский режим;
      4 — использование не регламентировано;
      5 — обычно используется для запуска системы в графическом режиме;
      6 — перезагрузка системы;
      Цитата http://citforum.ru/operating_systems/manpages/INITTAB.4.shtml
      Ключевым, так-же является, поле действие определяет дисциплину обработки процесса, указанного в строке.
      respawn Если процесс не существует, то запустить его, не ждать завершения (продолжать просмотр файла inittab), после завершения процесса перезапустить его. Если процесс уже существует, ничего не делать и продолжать просмотр файла inittab.
      wait При переходе на уровень_выполнения, совпадающий с указанным в строке, запустить процесс и ожидать его завершения. При всех последующих просмотрах файла inittab на том же уровне выполнения игнорировать строку.
      once При переходе на уровень_выполнения, совпадающий с указанным в строке, запустить процесс и не ожидать его завершения. Когда процесс завершится, не перезапускать его. Если уровень будет изменен в момент, когда программа еще выполняется из-за предыдущей смены уровня выполнения, то она не перезапускается.
      boot Эта строка будет обработана только один раз во время чтения init'ом файла inittab при начальной загрузке системы. Программа init запускает процесс и не ожидает его завершения. Когда процесс завершится, он не перезапускается. Чтобы это действие выполнялось, поле уровень_выполнения должно быть пустым или соответствовать уровню выполнения процесса init во время загрузки системы. Спецификацией boot помечают функции инициализации, следующие за аппаратной загрузкой системы.
      bootwait Эта строка будет обработана один раз при переходе init из однопользовательского режима в многопользовательский после загрузки системы. (Если действие initdefault соответствует уровню выполнения 2, то указанный в строке процесс будет запущен сразу после загрузки системы). Программа init запускает процесс, дожидается его завершения и после этого не перезапускает процесс.
      powerfail Выполнять указанный в строке процесс только при получении init'ом сигнала об ошибке питания SIGPWR.
      powerwait Выполнять указанный в строке процесс только при получении init'ом сигнала об ошибке питания SIGPWR и продолжать обработку файла inittab лишь после завершения процесса.
      off Если процесс, ассоциированный с данной строкой, выполняется, ему посылается предупреждающий сигнал SIGTERM и дается 20 секунд на завершение, после чего он принудительно терминируется сигналом SIGKILL. Если процесс не существует, строка игнорируется.
      ondemand Это действие является синонимом respawn, но используется только со значениями a, b и c в поле уровень_выполнения.
      initdefault Строка, в которой указано это действие, используется только при первом обращении к процессу init. Она определяет уровень выполнения, устанавливаемый первоначально: выбирается максимальная из цифр, указанных в поле уровень_выполнения. Если поле уровня пусто, оно рассматривается как содержащее 0123456 и, следовательно, устанавливается уровень выполнения 6. Если в файле /etc/inittab нет строки с действием initdefault, то начальное значение уровня выполнения запрашивается у пользователя в момент загрузки системы.
      sysinit Строки этого типа выполняются перед тем, как init попытается получить доступ к консоли (то есть перед выводом приглашения Console login:). Обычно подобные строки используются только для инициализации устройств, с которых init может попытаться запросить уровень выполнения. Команды из этих строк выполняются с ожиданием завершения.

      Пример инициализационной таблицы запускаемых процессов (файл /etc/inittab)
      ExpandedWrap disabled
        # /etc/inittab: init(8) configuration.
        # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
         
        # The default runlevel.
        id:5:initdefault:
         
        # Boot-time system configuration/initialization script.
        # This is run first except when booting in emergency (-b) mode.
        si::sysinit:/etc/init.d/rcS
         
        # What to do in single-user mode.
        ~~:S:wait:/sbin/sulogin
         
        # /etc/init.d executes the S and K scripts upon change
        # of runlevel.
        #
        # Runlevel 0 is halt.
        # Runlevel 1 is single-user.
        # Runlevels 2-5 are multi-user.
        # Runlevel 6 is reboot.
         
        l0:0:wait:/etc/init.d/rc 0
        l1:1:wait:/etc/init.d/rc 1
        l2:2:wait:/etc/init.d/rc 2
        l3:3:wait:/etc/init.d/rc 3
        l4:4:wait:/etc/init.d/rc 4
        l5:5:wait:/etc/init.d/rc 5
        l6:6:wait:/etc/init.d/rc 6
         
        my:2345:once:/media/mmcblk0/w/QtTest -qws
         
        # Normally not reached, but fallthrough in case of emergency.
        z6:6:respawn:/sbin/sulogin
        S:2345:respawn:/sbin/getty 115200 ttyS0 vt100
        # /sbin/getty invocations for the runlevels.
        #
        # The "id" field MUST be the same as the last
        # characters of the device (after "tty").
        #
        # Format:
        #  <id>:<runlevels>:<action>:<process>
        #
         
        1:2345:respawn:/sbin/getty 38400 tty1
      где строка "my:2345:once:/media/mmcblk0/w/QtTest -qws" как раз отвечает за единократный "once" запуск нашей программы "QtTest" с параметром "-qws" с флешкарты "/media/mmcblk0" из директории "w" из под любого пользовательского уровня "2345".

      В вышеприведённой инициализационной таблице мы можем видеть, что существует дополнительная возможность конфигурирования процесса: через создание скриптов запуска в директориях /etc/rcX.d, обработку которых осуществляет скрипт "/etc/init.d/rc". Так-же, следует заметить, что файлы из этих директорий могут являться ссылками, которые на самом деле располагаются в директории "/etc/init.d".

      Пример содержимого директории "/etc/rc3.d":
      Цитата
      S10dropbear S20ntpd S23bluetooth S50bonjour S90i2c S20boa S20syslog S25alsa-state S65cron S99rmnologin

      Например,
      именно через этот механизм происходит запуск OPIE: прописывается скрипт "/etc/rc5.d/S98opie".
      Или-же,
      если мы в ближайшее время не собираемся использовать bluetooth и/или работать со звуком, то можно удалить скрипты S23bluetooth и S25alsa-state соответственно, что значительно ускорит процесс загрузки; проще и надёжнее вписать в первую строчку "exit 0".
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0251 ]   [ 16 queries used ]   [ Generated: 28.03.24, 19:04 GMT ]