Каково различие между/etc/rc.local и/etc/init.d/rc.local?

Проверять, не было ли никаких аргументов, предоставленных команде, контрольному числу $# переменная затем,

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi

Если Вы хотите использовать $*(не предпочтительный) затем,

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi

Некоторое объяснение:

Второй подход не предпочтителен потому что в позиционном расширении параметра * расширяется до позиционных параметров, запускающихся от одного. Когда расширение происходит в двойных кавычках, оно расширяется до отдельного слова со значением каждого параметра, разделенного первым символом специальной переменной IFS. Это означает, что строка создается. Таким образом, существует дополнительно служебный.

С другой стороны, # расширяется до количества позиционных параметров.

Пример:

$ command param1 param2

Здесь,

Значение $# 2 и значение $* строка "param1 param2" (без кавычек), если IFS сброшена. Поскольку, если IFS сброшена, параметры разделяются пробелами

Для получения дополнительной информации man bash и считайте тему под названием Специальные Параметры

30
26.08.2014, 19:40
2 ответа

/etc/init.d сохраняется на человечности для обратной совместимости с материалом sysvinit. Если Вы на самом деле смотрите на /etc/init.d/rc.local Вы будете видеть (также с 12.04 Серверов LTS):

#! /bin/sh
### BEGIN INIT INFORMATION
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO

И "Выполненный/etc/rc.local" точно, что он делает. Полнота /etc/rc.local :

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

Я предположил бы цель в выполнении, это должно обеспечить, очень простое место для помещения оболочки управляет, чтобы Вы хотели выполненный при начальной загрузке, не имея необходимость иметь дело с stop|start сервисным материалом, который находится в /etc/init.d/rc.local.

Таким образом, это - на самом деле сервис и может быть выполнено как таковое. Я добавил a echo строка к /etc/rc.local и:

»service rc.local start
hello world

Однако я не полагаю, что на это ссылается что-либо в выскочке /etc/init (не init.d!) каталог:

»initctl start rc.local
initctl: Unknown job: rc.local

В выскочке существует несколько "емкостно-резистивных" сервисов:

»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting

Но ни один из тех, кажется, не имеет никакого отношения к rc.local.

32
27.01.2020, 19:38

Это - больше распределения определенная вещь. (как, Вы не найдете другой rc.local в CentOS).

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

Я не действительно уверен в том, почему Ubuntu все еще поддерживает их обоих? (Возможно, кто-то еще мог бы пролить некоторый свет по этой части!!)

5
27.01.2020, 19:38
  • 1
    Каково различие между командой, которая выполняется "как услуга" и код, который "просто запускается во время начальной загрузки"? Это - некоторая безопасность или что? –  grigoryvp 31.12.2012, 13:40
  • 2
    Базовое различие между этими двумя имеет по существу Обслуживание и процесс.;) Я предполагаю, что основное намерение было бы безопасностью только. Вы могли бы найти эту ссылку интересной: unixmen.com/managing-your-services-and-processes-in-linux –  pragmatic 31.12.2012, 13:54
  • 3
    Это неправильно! Они не тот же сценарий, но они - один сервис- /etc/init.d/rc.local делает остановку, запускают материал на /etc/rc.local (дополнительную информацию см. в моем ответе). –  goldilocks 31.12.2012, 16:37
  • 4
    @goldilocks: Спасибо за очень описательный и полный ответ, но я не ясен, какую часть моего ответа Вы отослали, чтобы быть неправильными? Высказывание того как услуга означает, что может сделать "запуск" и "остановить" материал, в то время как другой как просто процесс. Исправьте меня, если я не имею никакого смысла здесь. –  pragmatic 31.12.2012, 21:58
  • 5
    @pragmatic, поскольку /etc/rc.local сценарий является исполняемым процессом, которым управляют /etc/initd/rc.local сценарий, точно так же, как (например), /bin/syslog был бы исполняемый процесс, которым управляют /etc/initd/syslog. Вы говорите явно это /etc/rc.local просто сценарий начальной загрузки, по сравнению с. /etc/initd/rc.local будучи абсолютно отдельным сервисом уровня выполнения. –  goldilocks 01.01.2013, 01:37

Теги

Похожие вопросы