Яка різниця між /etc/rc.local та /etc/init.d/rc.local?


30

Я хочу додати постійне iptablesправило до мого нового VPS, і після короткого пошуку в Google я здивувався, що є два місця, це правило можна додати, що здається ідентичним: /etc/rc.localі /etc/init.d/rc.local. Можливо, хтось знає, чому там, де розміщується два місця для простого стартового коду? Це специфічний смак Linux (але ubuntu має і те і інше)? Або одна з них застаріла?


1
Одне повинно бути символьним посиланням на інше.
Ігнасіо Васкес-Абрамс

2
@ IgnacioVazquez-Abrams На сервері Ubuntu 12.04 x86 LTS вони зовсім інші :(.
grigoryvp

1
@ IgnacioVazquez-Abrams: На Debian вони також здаються різними.
Емануель Берг

3
Варто перевірити: я задав питання про /etc/rc.localдеякий час назад.
Емануель Берг

Відповіді:


31

/etc/init.dпідтримується на ubuntu для зворотної сумісності із системами sysvinit. Якщо ви насправді дивитесь, /etc/init.d/rc.localви побачите (також із сервера 12,05 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

І "Run /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

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

Тож насправді це послуга, і її можна запустити як таку. Я додав echoрядок до /etc/rc.localта:

»service rc.local start
hello world

Однак я не вірю, що на це посилається що-небудь у /etc/initкаталозі upstart (не init.d!):

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

Є кілька "rc" послуг на початку:

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

Але жоден з них, схоже, не має нічого спільного з rc.local.


5

Це скоріше конкретна річ. (наприклад, ви не знайдете різного rc.local у CentOS).

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

Я не дуже впевнений, чому Ubuntu досі підтримує їх обох? (Можливо, хтось інший може пролити трохи світла над цією частиною !!)


Яка різниця між командою, яка виконується "як послуга", та кодом, який "просто запускається під час завантаження"? Це якась безпека чи що?
grigoryvp

Основна відмінність між ними - це, по суті, Сервіс та процес. ;) Я думаю, що основним наміром буде лише безпека. Це посилання може бути вам цікавим: unixmen.com/managing-your-services-and-process-in-linux
прагматичний

Це неправильно! Вони не є одним і тим же сценарієм, але вони є однією послугою - /etc/init.d/rc.localчи зупиняється початок роботи /etc/rc.local(див. Мою відповідь для отримання більш детальної інформації).
золотинки

@goldilocks: Дякую за дуже описну і ретельну відповідь, але мені не ясно, яку частину моєї відповіді ви назвали неправильною? Якщо говорити про одну як про послугу, це означає, що вона може робити речі "старт" та "стоп", а інша - просто процес. Будь ласка, виправте мене, якщо я тут не маю сенсу.
прагматичний

2
@pragmatic Оскільки /etc/rc.localсценарій є виконавчим процесом, керованим /etc/initd/rc.localсценарієм, так само, як (наприклад, це /bin/syslogбув би виконуваний процес, яким керується /etc/initd/syslog. Ви прямо говорите, що /etc/rc.localце лише сценарій завантаження, і /etc/initd/rc.localце абсолютно окрема послуга рівня запуску.
золотинки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.