Как включить rc.local в Ubuntu, CentOS и AlmaLinux и запускать его при перезагрузке
В этой статье мы рассмотрим пошаговый метод включения файла rc.local в дистрибутивах Linux.

Как включить rc.local в Ubuntu, CentOS и AlmaLinux и запускать его при перезагрузке

Эта статья представляет собой пошаговое руководство по включению rc.local в системах Ubuntu, CentOS и AlmaLinux. Используя это руководство, системные администраторы и специалисты DevOps смогут легко запускать скрипты при загрузке системы.
0 Акции
0
0
0
0

 

Вам по-прежнему нужен rc.local?

В этом пошаговом руководстве мы научимся создавать традиционный файл. rc.local в распространённых дистрибутивах Linux, таких как Убунту, ЦентОС и AlmaLinux Включите и запустите необходимые скрипты или команды при загрузке системы.

Хотя systemd Он стал распространенным способом инициализации по умолчанию. rc.local Этот метод по-прежнему полезен для быстрого и простого выполнения коротких скриптов при загрузке системы. Ниже приведены методы, примеры, советы по безопасности и современные альтернативы.

 

Включение rc.local в Ubuntu (18.04, 20.04, 22.04 и выше)

В новых версиях Ubuntu, которые systemd Включить rc.local можно следующим образом. Общие шаги включают создание файла, установку прав доступа и создание/включение юнита для совместимости с systemd.

Общие шаги

  1. Создать файл /etc/rc.local И добавьте желаемый shebang и команды.
  2. Предоставление файлу прав на выполнение.
  3. Создайте или включите модуль rc.local в systemd (если он еще не существует).
  4. Загрузка, активация и проверка состояния сервиса.

Пример файла-образца /etc/rc.local (Всегда в конце) выход 0 Место):

#!/bin/bash
# Example: start Docker container named myapp
docker start myapp || docker run -d --name myapp myimage
# simple sysctl
/sbin/sysctl -w net.ipv4.ip_forward=1
exit 0

Затем установите права доступа:

sudo chmod +x /etc/rc.local

Если соответствующая единица не существует, создайте её:

sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target

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

[Install]
WantedBy=multi-user.target
EOF

И наконец:

sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -b

 

Включение rc.local в CentOS 7/8 и AlmaLinux 8/9

В дистрибутивах на основе RHEL используются разные пути; традиционный путь обычно выглядит следующим образом: /etc/rc.d/rc.local Общие шаги аналогичны тем, что используются в Ubuntu, но обратите внимание на путь к SELinux и соответствующие примечания.

Общие маршруты

  • /etc/rc.d/rc.local Традиционный путь лежит через RHEL/CentOS.
  • В некоторых системах связь может /etc/rc.local Существовать.

Этапы активации (CentOS / AlmaLinux)

Создать/отредактировать файл:

sudo nano /etc/rc.d/rc.local
#!/bin/bash
# Example: mount NFS or start a container
mount -a
/usr/bin/my-startup-script.sh &
exit 0

Исполнительная лицензия:

sudo chmod +x /etc/rc.d/rc.local

Если устройство не существует, создайте его:

sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionPathExists=/etc/rc.d/rc.local
After=network.target

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

[Install]
WantedBy=multi-user.target
EOF

А потом:

sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -b
sudo restorecon -v /etc/rc.d/rc.local
# or temporarily change context
sudo chcon -t bin_t /etc/rc.d/rc.local

Также лучше использовать абсолютные пути в скриптах, например: /usr/bin/docker Используйте это для уменьшения зависимости от PATH.

 

Практические примеры и полезные советы

Пример — Запуск скрипта запуска Docker

#!/bin/bash
# start redis container at boot
/usr/bin/docker run -d --name redis-cache --restart unless-stopped redis:6
exit 0

Примечание: Воспользуйтесь этой опцией --restart unless-stopped Позволяет Docker обрабатывать откат контейнера.

Пример — Сетевое монтирование перед запуском службы.

Если скрипт требует монтирования NFS, измените модуль systemd, добавив соответствующие зависимости:

[Unit]
After=network-online.target remote-fs.target
Wants=network-online.target remote-fs.target

Запуск длинного сценария или предоставление постоянного сервиса — лучший способ.

Для длительных или сервисно-ориентированных задач лучше создать выделенный модуль systemd, чтобы использовать такие функции, как перезапуск и мониторинг:

sudo tee /etc/systemd/system/myjob.service > /dev/null <<'EOF'
[Unit]
Description=My Long Running Job
After=network-online.target

[Service]
Type=simple
User=myuser
ExecStart=/usr/local/bin/my-long-script.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now myjob.service

 

Стандартная отладка

  • Сервис находится в состоянии сбоя: От sudo journalctl -u rc-local.service -b Используйте эту функцию для просмотра журнала.
  • Права доступа: Убедитесь, что файл является исполняемым (chmod +x) и вся эта штука существует в самом начале.
  • Относительные пути: Для бинарных файлов всегда используйте абсолютные пути.
  • Экологические переменные: rc.local имеет ограниченные возможности окружения; явно определяйте переменные, такие как PATH, или указывайте полный путь.
  • SELinux: Проверьте наличие ошибок AVC и установите контекст.
  • Зависимости: Если скрипт зависит от сети или файловой системы, следует указать единицу измерения. После= и Желания = Это должно подойти.

 

Альтернативы и лучшие практики

  • Выделенный модуль systemd: Это лучший вариант для предоставления услуг.
  • crontab @reboot: Подходит для выполнения простых задач пользователем:
    @reboot /usr/local/bin/myscript.sh
  • cloud-init: Подходит для первоначальной настройки в облачных средах.
  • Инструменты управления конфигурацией, такие как Ansible: Он используется для внесения повторяемых и управляемых изменений.

 

Советы по безопасности и эксплуатации

Запрещено выполнение конфиденциальных команд в rc.local Избегайте этого. Лучше запускать скрипты с указанием прав доступа или использовать... Пользователь= Используется в systemd.

Всегда записывайте в лог вывод скрипта и используйте ограниченные права доступа. Пример:

/usr/local/bin/myscript.sh >> /var/log/rc.local.log 2>&1
chmod 700 /usr/local/bin/myscript.sh

В производственных средах перед внесением изменений на критически важные серверы проведите тестирование на тестовой среде.

 

Связь данного обучения с услугами компании.

Услуги нашей компании, предоставляемые более чем в 85 локациях по всему миру, включая VPS, облачные серверы, графические серверы (GPU), выделенные серверы и сетевое оборудование, позволяют вам:

  • Быстрый запуск скриптов автозагрузки на VPS-серверах для торговли или игр.
  • На серверах с графическими процессорами используйте модули systemd для запуска ресурсоемких служб, чтобы обработка данных корректно начиналась после перезагрузки.
  • На сетевых серверах и серверах защиты от DDoS-атак создайте пользовательские модули systemd для запуска сетевых скриптов и правил iptables.
  • Служба поддержки готова помочь с вопросами, касающимися SELinux, путей монтирования и зависимостей.

 

Заключение и заключительные предложения

Несмотря на systemd, rc.local Это по-прежнему простой способ запуска пользовательских команд при загрузке, но для стабильности и мониторинга лучше использовать модули systemd.

Всегда обращайте внимание на права доступа, SELinux и зависимости служб, а для отладки используйте журналы.

Если у вас есть конкретные потребности (например, автоматизированное исполнение торговых ордеров роботом, подготовка среды для графических процессоров или настройка сети игрового сервера), наша техническая команда готова оказать помощь в различных регионах.

 

Часто задаваемые вопросы

Вам также может понравиться