systemd // "종속성"으로 인해 실패했습니다.

systemd // "종속성"으로 인해 실패했습니다.

저는 이 systemd주제를 처음 접했습니다. 요구 사항, 이후 및 이전이 다른 일부 장치가 있습니다. 일부 장치에서는 다음 메시지가 나타납니다.

tinc.service: Job tinc.service/start failed with result 'dependency'.

하지만 구체적으로 어떤 종속성인가요? 이것이 내가 문제를 파헤쳐보려고 시도한 방법입니다.

core@chimp ~ $ systemctl status tinc.service
● tinc.service - Tinc VPN Service
   Loaded: loaded (/etc/systemd/system/tinc.service; static; vendor preset: disabled)
   Active: inactive (dead)

May 04 18:09:18 chimp systemd[1]: Dependency failed for Tinc VPN Service.
May 04 18:09:18 chimp systemd[1]: tinc.service: Job tinc.service/start failed with result 'dependency'.

어떤 서비스가 필요한지 알아보세요...

core@chimp ~ $ cat /etc/systemd/system/tinc.service
[Unit]
Description=Tinc VPN Service
Requires=flannel-wait.service
After=flanneld.service tinc-env.service flannel-wait.service

#Before=early-docker.target

[Service]
Restart=always
RestartSec=3
Environment="DOCKER_HOST=unix:///var/run/early-docker.sock"
EnvironmentFile=/etc/tinc-env

EnvironmentFile=/etc/environment


ExecStartPre=/usr/bin/docker pull jenserat/tinc
ExecStartPre=/usr/bin/rm -rf /srv/tinc
ExecStartPre=/usr/bin/mkdir -p /srv/tinc
ExecStartPre=/bin/sh -c "/usr/bin/docker run --rm --volume /srv/tinc:/etc/tinc  jenserat/tinc init $TINC_HOSTNAME"
ExecStartPre=/bin/sh -c "/usr/bin/docker run --rm --volume /srv/tinc:/etc/tinc  jenserat/tinc add Address = $COREOS_PUBLIC_IPV4"
EnvironmentFile=/run/flannel/subnet.env
ExecStartPre=/bin/sh -c "/usr/bin/docker run --rm --volume /srv/tinc:/etc/tinc  jenserat/tinc add Subnet = `echo $FLANNEL_SUBNET | sed -e 's/1\\/24/0\\/24/'`"
ExecStartPre=/bin/sh -c "/usr/bin/docker run --rm --volume /srv/tinc:/etc/tinc  jenserat/tinc add Mode = switch"
ExecStartPre=/bin/sh -c "/usr/bin/docker run --rm --volume /srv/tinc:/etc/tinc  jenserat/tinc add DeviceType = tap"
ExecStartPre=-/usr/bin/docker rm -f tinc
ExecStartPre=/usr/bin/docker run --name tinc  -d --volume /srv/tinc:/etc/tinc --net=host --device=/dev/net/tun --cap-add NET_ADMIN jenserat/tinc start  -D

ExecStart=/bin/sh -c "while true; do etcdctl set /services/tinc/$TINC_HOSTNAME  \"\\\"` cat /srv/tinc/hosts/$TINC_HOSTNAME `\"\\\" --ttl 60;sleep 45;done"

#ExecStop=/usr/bin/docker rm -f tinc
ExecStopPost=/bin/sh -c  "etcdctl rm /services/tinc/$TINC_HOSTNAME"

계속하다 flannel-wait.service:

core@chimp ~ $ systemctl status flannel-wait.service
● flannel-wait.service - Wait For Flannel
   Loaded: loaded (/etc/systemd/system/flannel-wait.service; static; vendor preset: disabled)
   Active: inactive (dead)

May 04 18:09:18 chimp systemd[1]: Dependency failed for Wait For Flannel.
May 04 18:09:18 chimp systemd[1]: flannel-wait.service: Job flannel-wait.service/start failed with result 'dependency'.
core@chimp ~ $ cat /etc/systemd/system/flannel-wait.service

[Unit]
Description=Wait For Flannel
Requires=flanneld.service
After=flanneld.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo \"TINC_HOSTNAME=`hostname | sed -e 's/-/_/g'`\" > /etc/tinc-env"
ExecStartPre=/bin/sh -c "while [ ! -f /run/flannel/subnet.env ] ; do sleep 1; done"

드릴 디포..

core@chimp ~ $ systemctl status flanneld.service
● flanneld.service - Network fabric for containers
   Loaded: loaded (/usr/lib64/systemd/system/flanneld.service; static; vendor preset: disabled)
  Drop-In: /etc/systemd/system/flanneld.service.d
           └─50-network-config.conf
   Active: active (running) since Wed 2016-05-04 18:09:24 CEST; 12min ago
     Docs: https://github.com/coreos/flannel
  Process: 929 ExecStartPost=/usr/bin/docker run --net=host --rm -v /run:/run quay.io/coreos/flannel:${FLANNEL_VER} /opt/bin/mk-docker-opts.sh -d /run/flannel_docker_opts.env -i (code=exited, status=0/SUCCESS)
  Process: 879 ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config { "Network": "10.1.0.0/16", "Backend": { "Type": "alloc"} } (code=exited, status=0/SUCCESS)
  Process: 877 ExecStartPre=/usr/bin/touch ${FLANNEL_ENV_FILE} (code=exited, status=0/SUCCESS)
  Process: 875 ExecStartPre=/usr/bin/mkdir -p ${ETCD_SSL_DIR} (code=exited, status=0/SUCCESS)
  Process: 873 ExecStartPre=/usr/bin/mkdir -p /run/flannel (code=exited, status=0/SUCCESS)
  Process: 871 ExecStartPre=/sbin/modprobe ip_tables (code=exited, status=0/SUCCESS)
 Main PID: 886 (sdnotify-proxy)
   Memory: 12.0M
      CPU: 93ms
   CGroup: /system.slice/flanneld.service
           ├─886 /usr/libexec/sdnotify-proxy /run/flannel/sd.sock /usr/bin/docker run --net=host --privileged=true --rm --volume=/run/flannel:/run/flannel --env=NOTIFY_SOCKET=/run/flannel/sd.sock --env=AW...
           └─889 /usr/bin/docker run --net=host --privileged=true --rm --volume=/run/flannel:/run/flannel --env=NOTIFY_SOCKET=/run/flannel/sd.sock --env=AWS_ACCESS_KEY_ID= --env=AWS_SECRET_ACCESS_KEY= --e...

May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.131290 00001 main.go:275] Installing signal handlers
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.139346 00001 main.go:188] Using 178.XXXXXX as external interface
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.139363 00001 main.go:189] Using 178.XXXXX as external endpoint
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.140740 00001 etcd.go:129] Found lease (10.1.6.0/24) for current IP (178.XXXX), reusing
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.176357 00001 etcd.go:84] Subnet lease acquired: 10.1.6.0/24
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.234997 00001 ipmasq.go:50] Adding iptables rule: FLANNEL -d 10.1.0.0/16 -j ACCEPT
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.237095 00001 ipmasq.go:50] Adding iptables rule: FLANNEL ! -d 224.0.0.0/4 -j MASQUERADE
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.256054 00001 ipmasq.go:50] Adding iptables rule: POSTROUTING -s 10.1.0.0/16 -j FLANNEL
May 04 18:09:24 chimp sdnotify-proxy[886]: I0504 16:09:24.258241 00001 ipmasq.go:50] Adding iptables rule: POSTROUTING ! -s 10.1.0.0/16 -d 10.1.0.0/16 -j MASQUERADE
May 04 18:09:24 chimp systemd[1]: Started Network fabric for containers.

내가 이해하는 바에 따르면 - which가 실행 중인지 flannel-wait.service에 따라 다릅니다 . flanneld.service그러나 궁극적으로 왜 실패합니까?

미리 감사드립니다!

답변1

내 생각엔 flanneld.service가 플란넬 컨테이너를 다운로드해야 하는데, 여기에는 1초 정도 걸릴 수 있습니다. 플란넬 대기는 종속성의 기본 시간(아마도 30초?)을 기다린 후 실패했을 수 있습니다. 이것이 어떻게 영향을 미치는지 잘 모르겠습니다. 일반 서비스의 경우 restart=always만 추가하면 됩니다. 원샷은 실제로 한 번 실행되도록 설계되었기 때문에 다시 시작 매개변수를 가질 수 있는지 확실하지 않습니다. 그러나 이것은 단지 추측일 뿐이다.

관련 정보