- Вам по-прежнему нужен rc.local?
- Включение rc.local в Ubuntu (18.04, 20.04, 22.04 и выше)
- Включение rc.local в CentOS 7/8 и AlmaLinux 8/9
- Практические примеры и полезные советы
- Стандартная отладка
- Альтернативы и лучшие практики
- Советы по безопасности и эксплуатации
- Связь данного обучения с услугами компании.
- Заключение и заключительные предложения
- Часто задаваемые вопросы
Вам по-прежнему нужен rc.local?
В этом пошаговом руководстве мы научимся создавать традиционный файл. rc.local в распространённых дистрибутивах Linux, таких как Убунту, ЦентОС и AlmaLinux Включите и запустите необходимые скрипты или команды при загрузке системы.
Хотя systemd Он стал распространенным способом инициализации по умолчанию. rc.local Этот метод по-прежнему полезен для быстрого и простого выполнения коротких скриптов при загрузке системы. Ниже приведены методы, примеры, советы по безопасности и современные альтернативы.
Включение rc.local в Ubuntu (18.04, 20.04, 22.04 и выше)
В новых версиях Ubuntu, которые systemd Включить rc.local можно следующим образом. Общие шаги включают создание файла, установку прав доступа и создание/включение юнита для совместимости с systemd.
Общие шаги
- Создать файл /etc/rc.local И добавьте желаемый shebang и команды.
- Предоставление файлу прав на выполнение.
- Создайте или включите модуль rc.local в systemd (если он еще не существует).
- Загрузка, активация и проверка состояния сервиса.
Пример файла-образца /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 -bsudo 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
EOFsudo 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 и зависимости служб, а для отладки используйте журналы.
Если у вас есть конкретные потребности (например, автоматизированное исполнение торговых ордеров роботом, подготовка среды для графических процессоров или настройка сети игрового сервера), наша техническая команда готова оказать помощь в различных регионах.









