Когда при ручном вызове service
запускается сценарий в стиле SysV из /etc/init.d или /etc/rc.d, весь вывод состояния полностью зависит от этого сценария.
Правильно написанные скрипты init.d будут использовать библиотеку функций оболочки, предоставляемых дистрибутивом. Например, в Debian большинство сценариев будут загружать (исходить) файл /lib/lsb/init-functions
и просто вызывать предоставленные им функции следующим образом:
дело "1 доллар" в Начните) log_daemon_msg "Запуск $ DESC" "$ NAME" do_start дело "$?" в 0 | 1) log_end_msg 0 ;; 2) log_end_msg 1 ;; ESAC ;; [...] ESAC
Вот список стандартных функций, определенных LSB. (Обратите внимание, что дистрибутивы могут предоставлять дополнительные функции помимо стандарта, как в примере выше. Также обратите внимание, что, например, OpenRC или Arch Linux не совместимы с LSB и используют совершенно другие стили.)
Фактически, некоторые дистрибутивы также предоставляют этот стандартный код централизованно, и все, что осталось от сценария init.d - это реализовать do_start
. (См. /lib/init/init-d-script
Примеры в Gentoo OpenRC и Debian ). Однако это не «стандартная» функция LSB - сценарии, пытающиеся быть совместимыми с LSB, все равно должны делать это вручную.
Примечание: я подчеркиваю «Правильно написано», потому что на самом деле нет ничего, что заставило бы скрипт init.d использовать эти функции, кроме человеческого контроля. Если сценарий хочет сообщить о состоянии через обычный echo
(или через него cowsay
), он всегда может это сделать. Это особенно проблема с коммерческим программным обеспечением, распространяемым за пределами обычных каналов: вывод его состояния никогда не выглядит совершенно правильным (и, честно говоря, весь сценарий init.d никогда не ведет себя совершенно правильно).
Между тем, когда SysV-скрипты вызываются во время процесса загрузки, результат становится еще более зависимым от дистрибутива - иногда вы видите выходные данные непосредственно из самих сценариев, но иногда «основная» система инициализации предоставляет свой собственный вывод состояния для всех сервисов. это начинается. ( Пример: Arch старые Linux-скрипты при запуске службы в фоновом режиме.)
Но ваш второй пример на самом деле не инициализация в стиле SysV - это systemd (в вашем примере это просто запуск «устаревшего» скрипта init.d). Systemd - это полноценный менеджер сервисов, который использует конфигурации сервисов (не скрипты), и поэтому весь вывод состояния загрузки / выключения обеспечивается самим systemd. Это также относится к большинству других «менеджеров сервисов», включая init-ng, SMF или Upstart.