Как запускать программы при старте Ubuntu

Мы часто открываем одни и те же программы сразу после входа в систему. Ручной запуск каждого приложения занимает время. Некоторые программы на Linux уже настроены на автозапуск, но вы также можете добавить свои приложения, скрипты или команды, чтобы они запускались автоматически при старте системы.
В этом руководстве рассмотрены варианты управления автозапуском в Ubuntu: как через systemd (службы), так и через графический интерфейс GNOME и планировщик cron. Включены практические примеры, отложенный старт, шаблоны и чек‑листы для разных ролей.
Когда выбирать какой способ
- systemd — для демонов и сервисов, требующих управления статусом, зависимости и логирования.
- GNOME Startup Applications — для пользовательских GUI‑приложений, быстрого добавления через интерфейс.
- Cron (@reboot) — для простых одноразовых команд или скриптов при каждом перезапуске.
Важно: не включайте в автозапуск слишком много программ — это замедляет загрузку и увеличивает потребление ресурсов.
Запуск программ при старте с помощью systemd
systemd — это менеджер системных служб, который запускается первым при загрузке ОС. Большинство серверных приложений поставляются с systemd‑unit. Для программ, у которых нет готовой unit‑конфигурации, вы можете создать её сами.
Проверка наличия unit‑файла для программы:
systemctl list-unit-files | grep Пример: проверка Apache (apache2):
systemctl list-unit-files | grep apache2Если unit существует, вы увидите соответствующую строку в выводе.
Пример включения Apache для автозапуска:
sudo systemctl enable apache2Проверить, включена ли служба:
sudo systemctl is-enabled apache2Ожидаемый вывод: enabled — значит служба включена и запустится при загрузке.
Отключение автозапуска:
sudo systemctl disable apache2Создание собственного systemd unit (шаблон)
Если программа не поставляется с unit, создайте unit‑файл в каталоге /etc/systemd/system. Это стандартное место для локальных unit‑файлов, которые вы можете редактировать без перезаписи при обновлениях пакетов.
Пример создания unit‑файла test.service:
sudo nano /etc/systemd/system/test.serviceВставьте содержимое (отредактируйте путь в ExecStart на полный путь к вашей команде):
[Unit]
Description=Тестовый сервис для автозапуска
[Service]
Type=simple
ExecStart=/full/path/to/your/command --arg
Restart=on-failure
User=your-username
[Install]
WantedBy=multi-user.targetСохраните файл и установите корректные права (обычно 644):
sudo chmod 644 /etc/systemd/system/test.serviceПосле создания unit выполните перечитывание конфигурации и включите сервис:
sudo systemctl daemon-reload
sudo systemctl enable test.service
sudo systemctl start test.service
sudo systemctl status test.serviceСоветы по unit‑файлам:
- Используйте Restart=on-failure для автоматического перезапуска при ошибках.
- Указывайте User= для безопасности, если служба не должна запускаться от root.
- Для зависимостей применяйте After= и Wants= в секции [Unit].
Запуск программ при старте через GNOME Startup Applications (Программы автозапуска)
GNOME предлагает простой графический инструмент для добавления пользовательских приложений в автозапуск.
Открыть окно автозапуска можно через меню приложений (нажмите Super и введите «Программы автозапуска»), либо через диалог «Выполнить команду» (Alt+F2) и команду:
gnome-session-propertiesВ окне «Программы автозапуска» вы увидите список текущих пунктов. Чтобы добавить новое приложение, нажмите «Добавить».
- В поле «Название» укажите понятное имя.
- В поле «Команда» укажите полный путь до исполняемого файла. Найти путь можно командой which:
which slackИли нажмите «Обзор» и выберите исполняемый файл.
После добавления убедитесь, что рядом с пунктом стоит галочка — это включает автозапуск.
Отложенный запуск программ
Если приложение не нужно сразу после логина, добавьте задержку, чтобы снизить нагрузку на старт системы. В окне редактирования пункта автозапуска в поле «Команда» добавьте префикс sleep:
sleep 120; /usr/bin/slackГде 120 — время в секундах (2 минуты). Это полезно для тяжёлых приложений, которые можно запускать после восстановления системы.
Чтобы удалить приложение из автозапуска — выберите его и нажмите «Удалить».
Запуск через Cron (@reboot)
Cron позволяет запускать команды по расписанию, в том числе при перезагрузке через специальный шаблон @reboot.
Редактирование crontab для текущего пользователя:
crontab -eДобавьте строку, начинающуюся с @reboot, например:
@reboot /usr/bin/df -h >> /home/youruser/disk-space.txtЭта запись будет выполнять команду после каждой перезагрузки и сохранять вывод в файл disk-space.txt в домашней директории.
Чтобы удалить автозапуск — удалите соответствующую строку из crontab и сохраните.
Важно: cron выполняется в минимальном окружении — явно указывайте полные пути и переменные окружения, если они важны для скрипта.
Практическое руководство: чек-листы и шаблоны
Базовый чек‑лист перед добавлением в автозапуск
- Нужно ли приложению работать до входа других сервисов? Если да — используйте systemd и укажите зависимости.
- Есть ли у программы графический интерфейс? Если да и нужен пользовательский запуск — GNOME Startup проще.
- Требует ли запуск прав root? Если да, проверьте безопасность и возможности systemd (User, PermissionsStartOnly).
- Нужен ли логинг? Для systemd используйте journald; для cron — явно перенаправляйте вывод в файл.
- Не будет ли приложение блокировать завершение загрузки? Используйте Type=forking или Type=simple и настройте Restart.
Ролевые рекомендации
- Системный администратор: предпочитайте systemd для контроля статуса, зависимостей, логов и безопасности.
- Разработчик: используйте systemd для серверных демоноподобных приложений; для тестовых скриптов — cron @reboot.
- Обычный пользователь: GNOME Startup Applications — простой и безопасный способ добавить GUI‑программу в автозапуск.
Быстрый cheat‑sheet команд
# Проверить наличие unit
systemctl list-unit-files | grep
# Включить/отключить автозапуск
sudo systemctl enable my.service
sudo systemctl disable my.service
# Проверить состояние unit
sudo systemctl status my.service
sudo systemctl is-enabled my.service
# Создать unit и применить изменения
sudo nano /etc/systemd/system/my.service
sudo chmod 644 /etc/systemd/system/my.service
sudo systemctl daemon-reload
sudo systemctl enable my.service
sudo systemctl start my.service
# Добавить задачу cron на @reboot
crontab -e
# в crontab добавить строку вида
@reboot /path/to/script.sh >> /home/user/log.txt 2>&1
# GNOME: открыть окно автозапуска
gnome-session-properties Когда выбранный подход не сработает (ограничения и подводные камни)
- systemd не подходит для «чистой» GUI‑автозапуска в пользовательской сессии — лучше использовать GNOME Startup или .desktop‑файлы в ~/.config/autostart.
- Cron запускается до полной загрузки графической сессии; GUI‑приложения, запущенные через @reboot, могут не отобразиться корректно.
- Отложенный старт с помощью sleep в GNOME удобен, но ненадёжен для тонкой синхронизации; лучше использовать systemd‑таймеры (systemd timers) для точного планирования.
- Если у приложения есть проблемы с правами или путями — проверьте переменные окружения и абсолютные пути.
Альтернативные подходы и расширения
- systemd timers — замена cron с тесной интеграцией в systemd и контролем состояния таймеров.
- .desktop файлы в ~/.config/autostart — ещё один пользовательский способ автозапуска GUI‑приложений; совместим с множеством сред рабочего стола.
- Upstart (устаревший) и init.d — применимы в очень старых дистрибутивах, в современных Ubuntu рекомендуется systemd.
Мини‑методология внедрения автозапуска в проекте (4 шага)
- Классификация: сервис, пользовательское приложение или одноразовый скрипт?
- Выбор метода: systemd / GNOME / cron / .desktop.
- Реализация: создать unit/.desktop/cron‑запись; указать полные пути и пользователя.
- Тестирование и мониторинг: systemctl status, journalctl -u, проверка логов и загрузки.
Критерии приёмки
- Сервис/программа корректно запускается после перезагрузки без ручного вмешательства.
- Логи запуска доступны (journalctl для systemd, файлы логов для cron).
- Приложение работает под требуемым пользователем и не нарушает безопасность системы.
- При отключении автозапуска программа не стартует после следующей перезагрузки.
Краткая глоссарий 1‑строчками
- systemd — системный менеджер служб инициализации и контроля сервисов.
- unit — единица конфигурации systemd (файл с описанием сервиса).
- crontab — таблица cron для планирования задач.
- @reboot — специальный маркер cron для запуска при перезагрузке.
- .desktop — файл автозапуска для графических окружений (XDG Autostart).
Замечания по безопасности и хорошим практикам
- Не запускайте малознакомые бинарники от root в автозапуске.
- Ограничьте доступ к unit‑файлам и скриптам (права 644/700 по контексту).
- Используйте отдельного пользователя с минимальными правами для сервисов, которым не нужен root.
- Логируйте вывод и следите за поведением в течение первых нескольких перезагрузок.
Итог
Автоматический запуск программ при старте Ubuntu можно реализовать несколькими способами: systemd для сервисов, GNOME Startup для пользовательских GUI‑приложений и cron (@reboot) для простых задач. Выбор зависит от характера программы, требований к логированию и безопасности. Следуйте чек‑листу, проверяйте логи и избегайте избыточного автозапуска, чтобы не замедлять загрузку системы.
Important: включайте в автозапуск только необходимые приложения и регулярно проверяйте их влияние на время загрузки и нагрузку системы.
Похожие материалы
Настройка нескольких мониторов: параметры и советы
Сброс сетевых настроек в Windows 10 — полное руководство
Всплеск спама в почте: как реагировать и защититься
Как сделать fade‑in и fade‑out в GarageBand
Текст в Midjourney: как получить читабельные надписи