/etc/init.d
поддерживается в Ubuntu для обратной совместимости с 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
И «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
В upstart есть несколько "rc" сервисов:
»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting
Но ни один из них не имеет ничего общего с rc.local.