Как отключить запуск службы systemd при загрузке?

Вопрос или проблема

Я не могу понять, как сделать так, чтобы systemd не запускал определенную службу после перезагрузки.

Я пытался отключить службу, но не могу ее запустить после отключения, потому что файл юнита моей службы не находится в /etc/systemd/system.

Я также пытался очистить WantedBy.

Мой файл конфигурации:

[Service]
Type=simple
Restart=no
WorkingDirectory=/home/sentinel/arbitrage
ExecStart=/home/sentinel/arbitrage/venv/bin/python -m src.settings_bot.main
User=sentinel
Group=sentinel
Environment=PYTHONUNBUFFERED=1
Environment=DEV=
StandardOutput=append:/home/sentinel/arbitrage/settings-bot-log.txt
StandardError=append:/home/sentinel/arbitrage/settings-bot-log.txt

[Install]
WantedBy=

Ответ или решение

Отключение службы systemd от автоматического запуска при загрузке системы может представлять сложную задачу, особенно если вы столкнулись с нетипичным поведением из-за нестандартного местоположения файлов unit или других особенностей конфигурации. Ваша задача состоит в том, чтобы убедиться, что служба не запускается автоматически, но при этом сохраняется возможность её запуска вручную по мере необходимости.

Теоретическая часть

Systemd, являющийся стандартным системным и сервисным менеджером для большинства современных дистрибутивов Linux, обеспечивает управление службами и процессами в системе. Функция автоматического запуска службы при загрузке управляется с помощью команд enable и disable, которые изменяют символические ссылки в каталогах /etc/systemd/system. Когда вы вызываете systemctl enable <service>, systemd создаёт символическую ссылку на файл модуля в соответствующей папке, обусловленной спецификацией WantedBy= в разделе [Install].

Когда вы отключаете службу командой systemctl disable <service>, эта символическая ссылка удаляется, тем самым предотвращая автоматический запуск службы при следующей загрузке системы. Однако важно помнить, что команда disable снимает только символическую ссылку, и если ваша служба запускается по другим причинам (например, из-за зависимостей или хотлингов), данная команда может не подавить её автоматический запуск.

Пример

Ваша специфическая конфигурация службы, которая рассматривается в вашем вопросе, содержит следующие параметры:

[Service]
Type=simple
Restart=no
WorkingDirectory=/home/sentinel/arbitrage
ExecStart=/home/sentinel/arbitrage/venv/bin/python -m src.settings_bot.main
User=sentinel
Group=sentinel
Environment=PYTHONUNBUFFERED=1
Environment=DEV=
StandardOutput=append:/home/sentinel/arbitrage/settings-bot-log.txt
StandardError=append:/home/sentinel/arbitrage/settings-bot-log.txt

[Install]
WantedBy=

Один из ключевых аспектов, который вы упоминаете, это то, что файл unit не находится в стандартном каталоге /etc/systemd/system, что может быть причиной неожиданного поведения. Также вы упоминаете, что убрали WantedBy, однако это действие само по себе малоэффективно, потому что для удаления автоматического запуска нужно физически определить и удалить символические ссылки.

Применение

  1. Поиск и удаление символических ссылок:

    Убедитесь, что вы правильно определили, где находятся все символические ссылки, указывающие на ваш файл unit. Выполните следующую команду, чтобы найти все ссылки:

    systemctl list-unit-files | grep your-service-name

    Найдя все символические ссылки, выполните команду:

    sudo systemctl disable your-service-name

    Если ваш unit-файл не находится в /etc/systemd/system, вы должны проследить зависимые директории, например /usr/lib/systemd/system, чтобы убедиться в отсутствии других символических ссылок.

  2. Проверка зависимостей и хотлинков:

    Используйте команду systemctl list-dependencies your-service-name, чтобы определить, не является ли ваша служба зависимостью или условием запуска другой службы, которая может вызывать её запуск.

  3. Дополнительная диагностика:

    В настройке службы также следует уделить внимание секции [Install]. Если вы хотите полностью исключить возможность автоматического запуска службы, убедитесь, что там не указаны условия, инициирующие сервис.

  4. Перезапуск конфигурации systemd:

    После внесения изменений, перезапустите конфигурацию systemd, чтобы изменения вступили в силу:

    sudo systemctl daemon-reload
  5. Ручная проверка:

    Ручная проверка — это еще один способ убедиться, что ваша служба не стартует автоматически после перезагрузки. Для этого выполните перезагрузку системы и проверьте статус вашей службы:

    sudo reboot

    После загрузки введите:

    systemctl status your-service-name

Заключение

Ваша главная цель — убедиться, что служба не запускается автоматически при запуске системы, но остается доступной для ручного управления. Следуя вышеописанным шагам, вы сможете точно диагностировать и исправить проблему, добившись желаемого поведения. Если удаление всех символических ссылок не решило проблему, рекомендуется изучить dческие скрипты, которые также могут вызвать автоматический запуск службы. Если продолжают возникать трудности, возможно, стоит обратиться к более опытным специалистам по системе или обратиться к документации вашего дистрибутива Linux.

Оцените материал
Добавить комментарий

Капча загружается...