![systemd // "종속성"으로 인해 실패했습니다.](https://linux55.com/image/7438/systemd%20%2F%2F%20%22%EC%A2%85%EC%86%8D%EC%84%B1%22%EC%9C%BC%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EC%8B%A4%ED%8C%A8%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 이 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만 추가하면 됩니다. 원샷은 실제로 한 번 실행되도록 설계되었기 때문에 다시 시작 매개변수를 가질 수 있는지 확실하지 않습니다. 그러나 이것은 단지 추측일 뿐이다.