Назад | Перейти на главную страницу

Как узнать, почему была запущена служба systemd?

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

При запросе статуса службы systemctl утверждает, что она отключена, но все же работает, и я не просил ее запустить явно, AFAICT. Результат ниже (слегка анонимный)

# systemctl status myservice
● myservice.service - My Service
   Loaded: loaded (/usr/lib/systemd/system/myservice.service; disabled; vendor preset: disabled)
   Active: active (running) since mån 2017-02-27 13:57:15 CET; 30min ago
     Docs: http://www.example.com/
 Main PID: 4680 (ewe)
   CGroup: /system.slice/myservice.service
           ├─4680 /opt/myservice/vbc/bin/myservice
           └─4944 /opt/myservice/vbc/bin/myservice

я я запуск службы, которая установила Before=myservice.service в его .service файл (нет Requires), поэтому я подозреваю это, но не могу сказать наверняка.

Это работает в системе CentOS 7.3.

ИЗМЕНЕНО: Мне удалось обойти эту проблему, убедившись, что услуга, указанная выше, имеет Requires=, After= и Wants= отношение к, которое запускается временной службой однократного выполнения, явно останавливается. При этом служба не запускается. Я не приблизился к выяснению Зачем однако это было начато в первую очередь.

ИЗМЕНЕНО: Похоже, мой служебный файл началось всякий раз, когда одна из служб имеет Requires отношение к перезапущено. Я не ожидал, что это произойдет, я предположил, что это будет означать только то, что моя служба запустит другую службу при запуске, а не то, что она также запустит мою. Удаление Requires исправляет фантомные перезапуски.

Бег sudo systemctl status может помочь, как мог systemctl list-dependencies.

Я слышал о сервисах, запускаемых при установке (я думаю) на Ubuntu, но никогда на CentOS. Тем не мение, ЕСЛИ ваша служба имеет определенную единицу сокета, тогда трафик к данному сокету / порту может вызывать автоматический запуск вашей службы.

У меня есть такая настройка для TFTP, например:

sudo systemctl list-dependencies | grep socket

│ ├─sockets.target
│ │ ├─dbus.socket
<snip>
│ │ └─tftp.socket

Конфиг для него говорит о запуске службы, если получен трафик UDP / 69:

# /usr/lib/systemd/system/tftp.socket
[Unit]
Description=Tftp Server Activation Socket

[Socket]
ListenDatagram=69

[Install]
WantedBy=sockets.target