Вопрос или проблема
На моем сервере отображаются несколько отсутствующих служб. Как я могу удалить их из Systemd? Они значатся как not-found.
systemctl -a показывает: несколько not found
systemctl reset-failed показывает: все еще отображаются
Эти (ни одна из них не находится в /etc/systemd/ или /lib/systemd):
exim4.service – я использую postfix, никогда не устанавливал
apache2.service – я использую nginx
Спасибо!
systemd пытается загрузить все службы, которые указаны в Wants=
, Requires=
, After=
, Before=
, RequiresMountsFor=
, Conflicts=
, Requisite=
, PartOf=
, …, x-systemd.requires=
, x-systemd.requires-mounts-for=
, systemd.unit=
, SYSTEMD_WANTS=
и также ссылаются в .wants
и .requires
, и возможно в других местах, о которых я забыл.
Единицы, которые вы видите, должны быть указаны где-то. Systemd ничего не знает об apache2 или exim4 сам по себе. Учтите, что systemd будет создавать “обертки” для скриптов sysvinit.
Наличие этих служб в выводе systemctl --all
безвредно. Нет необходимости их “удалять”.
Согласно отличному ответу zbyszek, я создал небольшой удобный скрипт systemctl-list-not-found-rdeps
для поиска обратных зависимостей:
#!/bin/sh -e
# Для каждой единицы в состоянии not-found выводит файлы единиц, определяющие отношения к ней
COLOR_CYAN=$(tput setaf 6)
COLOR_GREEN=$(tput setaf 2)
COLOR_YELLOW=$(tput setaf 3)
COLOR_OFF=$(tput sgr0)
UNITS=$(systemctl list-units --state=not-found --quiet --plain | cut -f1 -d\ )
for UNIT in ${UNITS}
do
RDEPS="$(systemctl show "${UNIT}" | grep -E '(After|Before|For|Of|By)=')" \
|| { echo "${UNIT} rdep not found"; exit 1; }
echo "${RDEPS}" \
| sed -r "s/(.*)=(.*)/${COLOR_GREEN}\1 ${COLOR_YELLOW}\2${COLOR_OFF}/" \
| xargs -rI{} printf "${COLOR_CYAN}${UNIT}${COLOR_OFF} %s\n" '{}'
echo
done
Ответ или решение
Если вы заметили, что на вашем сервере отображаются несколько сервисов в состоянии "not-found" при выполнении команды systemctl -a
, это может вызвать вопросы о том, как безопасно удалить эти ссылки в Systemd. В большинстве случаев такие сервисы не оказывают значительного влияния на работу системы, но если вы хотите очистить список от ненужных или устаревших записей, следуйте указаниям ниже.
Шаг 1: Анализ причин
Первое, на что стоит обратить внимание — это то, что systemd может пытаться загрузить сервисы, упомянутые в указаниях таких как Wants=
, Requires=
, After=
, Before=
, и других подобного рода. Убедитесь, что ненужные ссылки не сохранены в конфигурационных файлах других активных сервисов, которые могут помимо воли порождать эти "not-found" состояния.
Шаг 2: Поиск зависимостей
Для нахождения реверсных зависимостей можно использовать скрипт systemctl-list-not-found-rdeps
, который поможет определить, откуда именно формируется упоминание о несуществующем сервисе. Скрипт выводит элегантно отформатированный список зависимостей:
#!/bin/sh -e
# Для каждого не найденного юнита показывать файлы юнитов, определяющие связи с ним
COLOR_CYAN=$(tput setaf 6)
COLOR_GREEN=$(tput setaf 2)
COLOR_YELLOW=$(tput setaf 3)
COLOR_OFF=$(tput sgr0)
UNITS=$(systemctl list-units --state=not-found --quiet --plain | cut -f1 -d\ )
for UNIT in ${UNITS}
do
RDEPS="$(systemctl show "${UNIT}" | grep -E '(After|Before|For|Of|By)=')" \
|| { echo "${UNIT} rdep not found"; exit 1; }
echo "${RDEPS}" \
| sed -r "s/(.*)=(.*)/${COLOR_GREEN}\1 ${COLOR_YELLOW}\2${COLOR_OFF}/" \
| xargs -rI{} printf "${COLOR_CYAN}${UNIT}${COLOR_OFF} %s\n" '{}'
echo
done
Шаг 3: Устранение неполадок и очистка
-
Редактирование конфигураций: Найдите и откройте конфигурационные файлы сервисов, где могут упоминаться удалённые сервисы, такие как
exim4.service
иapache2.service
, и удалите или исправьте эти записи. -
Удаление symlink’ов: Даже если юниты не присутствуют в
/etc/systemd/
или/lib/systemd/
, необходима проверка в директориях.wants
и.requires
, чтобы удостовериться, что там нет ссылок на несуществующие сервисы. -
Проверка и перезапуск: После всех изменений перезапустите
systemd-daemon
с помощью командыsystemctl daemon-reload
, чтобы применить изменения.
Хотя присутствие не найденных сервисов в списках systemctl
в целом безвредно, удаление их может помочь в поддержании порядка и облегчить управление сервером. Если вы уверены, что нежелательные сервисы не вызваны внешними зависимостями или системными конфигурациями, можете приступить к их устранению с учетом предоставленных рекомендаций.