Как на Ubuntu 18.04 включить rc.local

Posted by

Раньше (Precise, Trusty) я использовал конфигурационный файл rc.local дабы прописать путь до скриптов если хотел чтобы они запускались вместе с системой, а тут нужно было прописать запуск RocketChat, но на Ubuntu 18.04 Server такого файла нет. Как быть, может можно его вернуть. Вроде как можно, вот об этом и пойдет речь в текущей заметке.

Создаю файл сервиса:

ekzorchik@srv-bionic:~$ sudo nano /etc/systemd/system/rc-local.service

[Unit]

Description=/etc/rc.local Compatibility

ConditionPathExists=/etc/rc.local

[Service]

Type=forking

ExecStart=/etc/rc.local start

TimeoutSec=0

StandardOutput=tty

RemainAfterExit=yes

SysVStartPriority=99

[Install]

WantedBy=multi-user.target

ekzorchik@srv-bionic:~$ sudo chmod +x /etc/rc.local

ekzorchik@srv-bionic:~$ sudo systemctl enable rc-local

ekzorchik@srv-bionic:~$ sudo systemctl start rc-local

ekzorchik@srv-bionic:~$ sudo systemctl status rc-local | head -n5

rc-local.service - /etc/rc.local Compatibility

Loaded: loaded (/etc/systemd/system/rc-local.service; enabled-runtime; vendor preset: enabled)

Drop-In: /lib/systemd/system/rc-local.service.d

└─debian.conf

Active: active (exited) since Thu 2019-01-24 20:21:10 MSK; 9min ago

Создаю файл /etc/rc.local

ekzorchik@srv-bionic:~$ sudo nano /etc/rc.local

#!/bin/sh -e

exit 0

ekzorchik@srv-bionic:~$ sudo chmod +x /etc/rc.local

Включаю созданный сервис и запускаю:

ekzorchik@srv-bionic:~$ sudo systemctl enable rc-local

Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /etc/systemd/system/rc-local.service.

ekzorchik@srv-bionic:~$ sudo systemctl start rc-local.service

ekzorchik@srv-bionic:~$ sudo systemctl status rc-local.service

rc-local.service - /etc/rc.local Compatibility

Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset:

Drop-In: /lib/systemd/system/rc-local.service.d

└─debian.conf

Active: active (exited) since Thu 2019-01-24 20:21:10 MSK; 7s ago

Process: 733 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)

Jan 24 20:21:10 srv-bionic systemd[1]: Starting /etc/rc.local Compatibility...

Jan 24 20:21:10 srv-bionic systemd[1]: Started /etc/rc.local Compatibility.

Теперь если мне что-либо нужно запустить вместе с системой, к примеру скрипт, мне остается только выше строки exit 0 прописать путь до скрипта и в момент когда система будет загружаться выполнится мой скрипт.

Проверяю, в конфигурационный файл /etc/rc.local добавляю

ekzorchik@srv-bionic:~$ sudo nano /etc/rc.local

#!/bin/sh -e

echo 1 > /tmp/user

exit 0

ekzorchik@srv-bionic:~$ sudo reboot

ekzorchik@srv-bionic:~$ cat /tmp/user

1

На заметку: Файл сервиса также можно создать используя следующую команду:

ekzorchik@srv-bionic:~$ sudo systemctl edit --full rc-local

[Unit]

Description=/etc/rc.local Compatibility

Documentation=man:systemd-rc-local-generator(8)

ConditionFileIsExecutable=/etc/rc.local

After=network.target

[Service]

Type=forking

ExecStart=/etc/rc.local start

TimeoutSec=0

RemainAfterExit=yes

GuessMainPID=no

Затем создаю также файл и добавляю ему атрибуты запуска, как выше, если бы делал все вручную.

ekzorchik@srv-bionic:~$ sudo tee /etc/rc.local <<EOF

#!/bin/sh -e

exit 0

EOF

Скрипт успешно отработал. Значит и моя строка запуска RocketChat также произведет запуск вместе с загрузкой системы как я и планировал. Пока считаю данную заметку выполненной, если что будет добавить я вернусь к ней. А пока на этом всё, с уважением автор блога Олло Александр aka ekzorchik.