rc.local в Debian


Файл rc.local в Debian используется для того чтобы добавлять собственные скрипты, которые будут выполняться после старта системы.


rc.local в Debian и автозапуск сервисов


rc.local по умолчанию выглядит следующим образом:

mcedit /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



Он содержит только комментарии и не является исполняемым, поэтому не используется. Добавить в него собственные команды или путь к скриптам — самый простой способ выполнять что-либо после старта системы.

Для собственных сервисов можно писать демоны и скрипты инициализации в стиле SysV, Upstart или SystemD, но проще всего делать это меняя /etc/rc.local


Все команды прописываются перед строкой с нулевым кодом выхода. Например, можно написать команду, по которой в одном из Docker контейнеров будет перезапускаться Unicorn

docker exec -it `docker ps | awk {'print $1'} | head -n 2 | tail -n 1` bash -c «supervisorctl restart unicorn»

exit 0



Чтобы файл начал использоваться системой его нужно сделать исполняемым

chmod +x /etc/rc.local


То же действие нужно проделать со скриптами если они включаются в rc.local



Проверить нет ли каких-то ошибок можно выполнив файл из консоли — при этом служба стартует и вместе с тем в первый раз выполняются действия, указанные в файле

/etc/init.d/rc.local start



Если скрипт (или добавленная команда) отработал штатно можно перезагружать сервер.

Лучше всего также писать служебную информацию в лог чтобы контролировать все ли идет нормально и устранять неполадки если они возникают.

reboot




В системах с systemd необходимость в rc-local практически отпала, функция rc-local реализуется за счет systemd. Но обратная совместимость сохраняется, в Debian можно включить сервис rc-local через systemd:

systemctl enable rc-local

systemctl start rc-local.service


rc local debian




Если требуется прекратить использовать скрипт нужна такая команда

/etc/init.d/rc.local stop



Служба rc.local очень часто оказывается полезна при решении повседневных административных задач.

Читайте про управление Docker контейнерами.

Сказать спасибо