Однажды я заметил что по умолчанию файла /etc/rc.local в Ubuntu 18 нет, но его можно создать.
Для этого переключимся на root пользователя:
sudo -i
Создадим файл /etc/rc.local например редактором nano (Ctrl+X для выхода из редактора, y/n для сохранения или отмены изменений):
nano /etc/rc.local
Добавим в него содержимое как в Ubuntu 16:
#!/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
Сделаем файл выполняемым:
chmod +x /etc/rc.local
Готово, теперь можно писать свои команды и они выполнятся при запуске операционной системы, последней строкой обязательно должна остаться «exit 0».
Замечу, что при любой ошибке, то есть если любая команда в файле rc.local при выполнении сообщит об ошибке, то выполнение скрипта остановится и все остальные команды не будут выполнены. По этому после перезапуска Linux убедимся что rc.local выполнил все команды (если успешно, то статус будет active (exited)):
systemctl status rc-local.service
Если другой статус, то устраним проблему и попробуем запустить вручную (при тестовом запуске вручную, возможно понадобится отменить некоторые выполненные команды, приведу пример, допустим в скрипте есть команды «ipset create …», которые уже выполнились при запуске Linux, то если не удалить созданные ipset «ipset destroy …», то при повторном выполнении ipset create из rc.local возникнет ошибка, так как ipset уже существует и выполнение скрипта прекратится на этом месте, либо можно не заморачиваться с этим и просто перезапустить Linux, а потом проверить статус):
systemctl start rc-local.service
Смотрите также мои статьи:
Автозагрузка программ в Ubuntu
Использование и настройка CRON