Автозапуск скрипта при старте системы в Linux systemd настраивается созданием unit-файла в директории /etc/systemd/system/ с указанием пути к скрипту и его параметров выполнения. Это стандартный механизм инициализации современных дистрибутивов Linux.
Зачем это нужно
- Автоматический запуск служб и приложений без ручного вмешательства после перезагрузки сервера
- Управление зависимостями между сервисами и контроль порядка их инициализации
- Централизованное логирование и мониторинг процессов через journalctl
- Ограничение прав доступа — запуск скриптов от определённого пользователя
- Автоматический перезапуск скрипта при его критическом завершении
Пошаговая инструкция
- Откройте терминал и перейдите в директорию systemd:
cd /etc/systemd/system/ - Создайте новый unit-файл с расширением
.service:sudo nano myscript.service - Скопируйте следующий шаблон в файл:
[Unit] Description=My Startup Script After=network.target [Service] Type=simple User=username WorkingDirectory=/home/username ExecStart=/home/username/myscript.sh Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target - Замените
usernameна имя пользователя, от которого должен запускаться скрипт - Замените
/home/username/myscript.shна абсолютный путь к вашему скрипту - Убедитесь, что скрипт имеет права на выполнение:
sudo chmod +x /home/username/myscript.sh - Сохраните файл: нажмите
Ctrl+O, затемEnter, затемCtrl+X - Перезагрузите конфигурацию systemd:
sudo systemctl daemon-reload - Включите автозапуск сервиса:
sudo systemctl enable myscript.service - Запустите сервис немедленно для проверки:
sudo systemctl start myscript.service - Проверьте статус выполнения:
sudo systemctl status myscript.service - Просмотрите логи работы:
sudo journalctl -u myscript.service -f
Часто задаваемые вопросы
Как отключить автозапуск скрипта? Выполните команду sudo systemctl disable myscript.service, после чего сервис не будет запускаться при загрузке системы.
Почему скрипт не запускается после перезагрузки? Проверьте права на выполнение файла (chmod +x), убедитесь в корректности пути в параметре ExecStart и проверьте логи через journalctl.
Можно ли запустить несколько скриптов один за другим? Да, используйте параметр Type=oneshot в unit-файле и указывайте несколько команд через ExecStart или создайте bash-скрипт-обёртку.