systemctl, как разоблачить

27
root@gcomputer:~# systemctl status x11-common
● x11-common.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

Я попробовал systemctl unmask x11-commonи , systemctl unmask x11-common.serviceно это ничего не изменило.

Как мне разоблачить это?

Альберт
источник

Ответы:

35

Команды, которые вы используете, являются правильными . Смотрите также руководство .

Кажется, unmaskкоманда завершается неудачно, если в системе нет файла модуля, кроме символической ссылки на /dev/null. Если вы maskслужба, то это создает новую символическую ссылку, /dev/nullв /etc/systemd/systemкоторой systemd ищет файлы модулей для загрузки при загрузке. В этом случае файл реального модуля отсутствует.

У других, похоже, есть похожие проблемы

x11-common.serviceбыл также замаскирован в моей системе. Вы можете исправить это так:

Сначала проверьте, что файл модуля является символической ссылкой на /dev/null

file /lib/systemd/system/x11-common.service

должно вернуться:

/lib/systemd/system/x11-common.service: symbolic link to /dev/null

в этом случае удалите его

sudo rm /lib/systemd/system/x11-common.service

Поскольку вы изменили файл модуля, вам нужно запустить это:

sudo systemctl daemon-reload

Теперь проверьте статус:

systemctl status x11-common

если он не загружен и работает (если круг все еще красный), переустановите пакет:

sudo apt-get install --reinstall x11-common

и перезагрузите демон снова

sudo systemctl daemon-reload

и проверьте статус еще раз

systemctl status x11-common

Теперь он зеленый и работает :) У службы нет файла модуля systemd, но /etc/init.dвместо этого systemd использует сценарий для него .

Занна
источник
Хорошо, дополнительный вопрос: если он был даже замаскирован в вашей системе, для чего этот сервис? Кажется, что это действительно не нужно, если это замаскировано для нас обоих.
Альберт
@Albert [см. Здесь.] ( Askubuntu.com/questions/712276/… ) кажется, что служба работает без файла системного модуля (у него есть файл в /etc/init/...). Вы можете задать новый вопрос. То, что я сделал, не имело никакого значения, только сервис показывает, что загружен, включен, остановлен (он активен при запуске) (зеленый) вместо загруженных замаскированных мертвых (красный). Я должен прочитать мои журналы ...
Zanna
если приходит обновление для systemd, файл модуля переустанавливается, так что это не совсем структурное решение
hbogert
@hbogert это происходит, даже если не было никакого файла модуля кроме символической ссылки на /dev/null? Вы правы по поводу моего ответа, хотя. Я бы назвал это решение обходным путем для ... запутанного поведения ... systemd
Zanna
Не могли бы вы описать ваше первое предложение в терминах точных файлов, которые имеют значение в данном случае (потому что я не совсем понимаю сценарий, который вы описываете)?
hbogert
2

Это может быть ваша служба имеет пустой файл переопределения, например:

● redis-server.service - расширенное хранилище значений ключей. Загружен: загружен (/lib/systemd/system/redis-server.service; замаскирован; предустановка поставщика: включена). Drop-In: / etc / systemd / system / redis-server .service.d └─limit.conf

Проверьте, является ли limit.conf пустым файлом. Если это так, пожалуйста, удалите его. Тогда услуга должна быть разоблачена.

Эрик Хенсема
источник
0

Следуйте инструкциям ниже:

  1. systemctl edit systemd-hostnamed

    Добавьте 2 строки ниже и выйдите из редактора (не забудьте сохранить при появлении запроса):

    [Service]
    PrivateNetwork=no
    
  2. Это создаст файл override.conf с двумя указанными выше строками в каталоге:

    /etc/systemd/system/systemd-hostnamed.service.d/
    
  3. Обновление systemd:

    systemctl daemon-reload
    
  4. Затем перезапустите сервис:

    systemctl restart systemd-hostnamed
    

Теперь вы должны быть в состоянии бежать hostnamectlбез зависания.

Хоссейн
источник