włączona jednostka systemowa nie uruchamia się podczas rozruchu

35

Mam systemd-unitw swoim systemie, który jest włączony. Problem polega na tym, że nie uruchamia się ponownie po ponownym uruchomieniu. Zależy to od dwóch innych usług, które są uruchamiane zgodnie z oczekiwaniami.

Usługa jest znana, włączona i nie działa:

[centos@ansible-kube-4 ~]$ sudo systemctl status flanneld
flanneld.service - Flanneld overlay address etcd agent
   Loaded: loaded (/usr/lib/systemd/system/flanneld.service; enabled)
   Active: inactive (dead)

Plik jednostki:

[centos@ansible-kube-4 ~]$ cat /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=etcd.service

[Service]
Type=notify
Restart=always
RestartSec=3

EnvironmentFile=/etc/sysconfig/flanneld
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} -etcd-prefix=${FLANNEL_ETCD_KEY} $FLANNEL_OPTIONS
ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker

[Install]
WantedBy=multi-user.target

Aktualizacja 1

Wyjście dmesg:

$ dmesg | grep systemd
[    1.312165] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ)
[    1.317238] systemd[1]: Detected virtualization 'kvm'.
[    1.319597] systemd[1]: Running in initial RAM disk.
[    1.323489] systemd[1]: No hostname configured.
[    1.324874] systemd[1]: Set hostname to <localhost>.
[    1.327570] systemd[1]: Initializing machine ID from KVM UUID.
[    1.389047] systemd[1]: Expecting device dev-disk-by\x2duuid-a78bb152\x2de525\x2d4f0e\x2d961a\x2dbf6147ac7d3e.device...
[    1.394577] systemd[1]: Starting -.slice.
[    1.396820] systemd[1]: Created slice -.slice.
[    1.397990] systemd[1]: Starting System Slice.
[    1.400212] systemd[1]: Created slice System Slice.
[    1.401503] systemd[1]: Starting Slices.
[    1.403556] systemd[1]: Reached target Slices.
[    1.404756] systemd[1]: Starting Timers.
[    1.406834] systemd[1]: Reached target Timers.
[    1.408042] systemd[1]: Starting Dispatch Password Requests to Console Directory Watch.
[    1.410065] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[    1.413402] systemd[1]: Starting Paths.
[    1.415399] systemd[1]: Reached target Paths.
[    1.416574] systemd[1]: Starting Journal Socket.
[    1.418894] systemd[1]: Listening on Journal Socket.
[    1.420242] systemd[1]: Started dracut ask for additional cmdline parameters.
[    1.422150] systemd[1]: Starting dracut cmdline hook...
[    1.424870] systemd[1]: Started Load Kernel Modules.
[    1.426124] systemd[1]: Starting Journal Service...
[    1.429731] systemd[1]: Started Journal Service.
[    1.692884] systemd-udevd[213]: starting version 208
[    2.621300] systemd-journald[90]: Received SIGTERM
[    2.968711] systemd[1]: Successfully loaded SELinux policy in 274.569ms.
[    3.023076] systemd[1]: Relabelled /dev and /run in 20.031ms.
[    3.365195] systemd-udevd[382]: starting version 208
[    3.482910] systemd-journald[377]: Received request to flush runtime journal from PID 1

Aktualizacja 2

Wyjście chkconfig:

sudo chkconfig

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

Wyjście systemctl list-dependencies flanneld:

flanneld.service
├─system.slice
└─basic.target
  ├─microcode.service
  ├─rhel-autorelabel-mark.service
  ├─rhel-autorelabel.service
  ├─rhel-configure.service
  ├─rhel-dmesg.service
  ├─rhel-loadmodules.service
  ├─paths.target
  ├─slices.target
  │ ├─-.slice
  │ └─system.slice
  ├─sockets.target
  │ ├─dbus.socket
  │ ├─rpcbind.socket
  │ ├─systemd-initctl.socket
  │ ├─systemd-journald.socket
  │ ├─systemd-shutdownd.socket
  │ ├─systemd-udevd-control.socket
  │ └─systemd-udevd-kernel.socket
  ├─sysinit.target
  │ ├─dev-hugepages.mount
  │ ├─dev-mqueue.mount
  │ ├─kmod-static-nodes.service
  │ ├─proc-sys-fs-binfmt_misc.automount
  │ ├─sys-fs-fuse-connections.mount
  │ ├─sys-kernel-config.mount
  │ ├─sys-kernel-debug.mount
  │ ├─systemd-ask-password-console.path
  │ ├─systemd-binfmt.service
  │ ├─systemd-journal-flush.service
  │ ├─systemd-journald.service
  │ ├─systemd-modules-load.service
  │ ├─systemd-random-seed.service
  │ ├─systemd-sysctl.service
  │ ├─systemd-tmpfiles-setup-dev.service
  │ ├─systemd-tmpfiles-setup.service
  │ ├─systemd-udev-trigger.service
  │ ├─systemd-udevd.service
  │ ├─systemd-update-utmp.service
  │ ├─systemd-vconsole-setup.service
  │ ├─cryptsetup.target
  │ ├─local-fs.target
  │ │ ├─-.mount
  │ │ ├─rhel-import-state.service
  │ │ ├─rhel-readonly.service
  │ │ ├─systemd-fsck-root.service
  │ │ └─systemd-remount-fs.service
  │ └─swap.target
  └─timers.target
    └─systemd-tmpfiles-clean.timer
maklemenz
źródło

Odpowiedzi:

32

Plik jednostki został zmodyfikowany:

Przed:

[Install]
RequiredBy=docker.service

Po:

[Install]
WantedBy=multi-user.target

Po tej modyfikacji nie włączyłem ponownie urządzenia. Okazało się, że jest to potrzebne do ponownej konfiguracji systemu:

$ sudo systemctl reenable flanneld
rm '/etc/systemd/system/docker.service.requires/flanneld.service'
ln -s '/usr/lib/systemd/system/flanneld.service' '/etc/systemd/system/multi-user.target.wants/flanneld.service'
maklemenz
źródło
2
Ja też odkryłem, że to pomogło i nie wiem dlaczego. Być może reenablepoprawiłem coś, czego nie zrobiłem lub spartaczyłem i nie mogłem zobaczyć, ponieważ nie zmrużyłem wystarczająco mocno. W każdym razie z dwóch identycznych hostów, na których konfigurowałem, aby moja usługa pojawiła się po restarcie, jeden działał, a drugi nie, dopóki tego nie zrobiłem.
Russ Bateman
1
Czy to możliwe, że został wyłączony przez aktualizację? Miałem jeden podejrzany serwer, na którym został wyłączony po aktualizacji ... sudo systemctl reenable rails-puma.service rozwiązał problem
Dave Collins
1
może dotyczy: unix.stackexchange.com/questions/193714/...
ThorSummoner
9

W twojej konfiguracji nie znajduję dowodów na to, że ta usługa powinna zostać uruchomiona podczas rozruchu. systemdumożliwia dwa sposoby włączenia usługi, aby była ona uruchamiana podczas rozruchu:

chkconfig flanneld on

Lub:

systemctl enable flanneld

W rzeczywistości pierwszy jest starszym sposobem wywoływania drugiego i nie jestem pewien, czy chkconfigpakiet jest instalowany domyślnie, ale można go zainstalować za pomocą apt-getlub yum.

nKn
źródło
Usługa jest włączona. Kiedyś sudo systemctl enable flanneldto umożliwiałem.
maklemenz
Po uruchomieniu nadal nie uruchamia się przy starcie?
nKn
Po każdym ponownym uruchomieniu muszę ręcznie uruchomić usługę. Zaczyna się przy pierwszej próbie i bez żadnych komunikatów o błędach lub ostrzeżeń.
maklemenz
1
Coś jeszcze musi zawieść. Oficjalnie sposobem włączenia usługi przy uruchomieniu w systemie jest systemctl enable servicename. Większość przykładów zawiera także .servicezakończenie w poleceniu, ale nie jestem pewien, czy to powinno coś zmienić.
nKn
Sufiks .service jest dodawany automatycznie, gdy zostanie pominięty przez użytkownika.
mrg2k8