หน่วย systemd ที่เปิดใช้งานไม่เริ่มทำงานเมื่อบู๊ต


35

ฉันsystemd-unitใช้งานระบบของฉันแล้ว ปัญหาคือมันไม่รีสตาร์ทหลังจากรีบูต ขึ้นอยู่กับบริการอื่นสองบริการที่เริ่มต้นอย่างที่คาดไว้

บริการรู้จักใช้งานและไม่ทำงาน:

[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)

ไฟล์หน่วย:

[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

อัปเดต 1

ผลลัพธ์ของ 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

อัปเดต 2

ผลลัพธ์ของ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

ผลลัพธ์ของ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

คำตอบ:


32

ไฟล์หน่วยถูกแก้ไข:

ก่อน:

[Install]
RequiredBy=docker.service

หลังจาก:

[Install]
WantedBy=multi-user.target

หลังจากการดัดแปลงนั้นฉันไม่ได้เปิดใช้งานเครื่อง ปรากฎว่าสิ่งนี้จำเป็นสำหรับ systemd เพื่อกำหนดค่าใหม่:

$ 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'

2
ฉันก็พบว่าสิ่งนี้ช่วยได้และฉันก็ไม่รู้เหมือนกันว่าทำไม อาจreenableแก้ไขบางสิ่งที่ฉันไม่ได้ทำหรือทำไม่เรียบร้อยและไม่สามารถมองเห็นได้เพราะฉันไม่ได้พยายามอย่างหนักพอ อย่างไรก็ตามจากโฮสต์ที่เหมือนกันสองแห่งที่ฉันกำหนดค่าเพื่อให้บริการของฉันเกิดขึ้นหลังจากรีบูตหนึ่งทำงานและอีกอันไม่ทำจนกว่าฉันจะทำสิ่งนี้
Russ Bateman

1
เป็นไปได้หรือไม่ว่ามันถูกปิดการใช้งานโดยการอัพเกรด? ฉันมีเซิร์ฟเวอร์หนึ่งที่น่าสงสัยที่มันถูกปิดใช้งานหลังจากการอัพเกรด ... sudo systemctl reenable ราง-puma.serviceแก้ไขปัญหา
เดฟคอลลิน

1
อาจเกี่ยวข้อง: unix.stackexchange.com/questions/193714/…
ThorSummoner

9

ฉันไม่พบหลักฐานใด ๆ ในการกำหนดค่าของคุณว่าบริการนี้ควรเริ่มต้นในเวลาบูต systemdอนุญาตให้เปิดใช้งานบริการได้สองวิธีดังนั้นจึงเริ่มต้นในเวลาบูต:

chkconfig flanneld on

หรือ:

systemctl enable flanneld

ในความเป็นจริงเป็นครั้งแรกเป็นวิธีที่มรดกของการเรียกคนที่สองและผมไม่แน่ใจว่าถ้าchkconfigแพคเกจติดตั้งโดยค่าเริ่มต้น แต่คุณสามารถติดตั้งใช้หรือapt-getyum


เปิดใช้งานบริการแล้ว ฉันใช้sudo systemctl enable flanneldเพื่อเปิดใช้งาน
maklemenz

หลังจากใช้งานมันยังไม่เริ่มต้นเมื่อเริ่มต้นหรือไม่
nKn

ฉันต้องเริ่มบริการด้วยตนเองหลังจากรีบูตแต่ละครั้ง มันเริ่มต้นในการลองครั้งแรกและไม่มีข้อความแสดงข้อผิดพลาดหรือคำเตือน
maklemenz

1
จะต้องมีสิ่งอื่นที่ล้มเหลว อย่างเป็นทางการทางที่จะเปิดใช้บริการในการเริ่มต้นใน systemd systemctl enable servicenameคือ ตัวอย่างส่วนใหญ่รวมถึงการ.serviceเลิกจ้างในคำสั่งด้วย แต่ฉันไม่แน่ใจว่าควรทำสิ่งใด
nKn

. suffice ส่วนต่อท้ายจะถูกเพิ่มโดยอัตโนมัติเมื่อผู้ใช้ละเว้น
mrg2k8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.