LINUX.ORG.RU
решено ФорумAdmin

Когда запускается rc.local ?

 , ,


0

1

Столкнулся с проблемой, при попытке запуска docker-compose из rc.local сервис докера еще не был поднят и возникала ошибка

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
При этом возникала она не на всех машинах, а только на части из них. В итоге я просто написал unit для SystemD, но так и не разобрался почему сервис докера не был поднят к моменту когда запускается rc.local. Насколько я знаю rc.local запускается в самом конце. Дистрибутив CentOS 7.

По уму rc.local должен отрабатывать (запускаться) после всего остального, кроме интернетозависимого, если не указано иного. Про реализацию интеграции с systemd ничего не знаю.

r3lgar ★★★★★
()

Насколько я понимаю, в systemd дистрах юниты запускаются не по порядку, а все сразу, если только у них не указаны зависимости, поэтому rc.local здесь пережиток прошлого. В новом Debian его вообще нет.

В качестве костыля можно в начало rc.local прописать например

sleep 10
чтобы он гарантировано запустил свое содержимое последним.

afanasiy ★★★★
()
Ответ на: комментарий от afanasiy

Ага я в начале так и сделал до того, как SystemD unit написал

mythCreator
() автор топика

Кажется я понял

cat /lib/systemd/system/rc-local.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

он стартует после network.target, а не в конце.

mythCreator
() автор топика
Ответ на: комментарий от mythCreator

Fedora 27

After=systemd-journald.socket basic.target system.slice network.target sysinit.target
Debian 9
After=network.target sysinit.target system.slice network-online.target systemd-journald.socket basic.target

Похоже в этих ваших кентосях опять кое-что забыли.

entefeed ☆☆☆
()
Ответ на: комментарий от entefeed

Это не из centOS у меня ее нету сейчас под рукой это с debian 9 не знаю почему у нас по разному, возможно потому, что я ставил ее не с нуля, а обновлял с 7 до 8, а потом с 8 до 9

mythCreator
() автор топика
Ответ на: комментарий от entefeed

Debian 9 - с нуля поставленный и проапгреденный с deb7 ->deb8->deb9

After=network.target
Все-таки это у вас более другой Deb9.

Кстати в копейкоос также. Но они в отличии от дебиан положили файло /etc/rc.local ( на самом деле симлинк на /etc/rc.d/rc.local) в котором предупреждение есть
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.