스크립트가 실행되기 전에 네트워크 서비스가 시작될 때까지 기다리지 않는 이유는 무엇입니까?

스크립트가 실행되기 전에 네트워크 서비스가 시작될 때까지 기다리지 않는 이유는 무엇입니까?

저는 Debian 8을 사용하고 있으며 스크립트를 구성하여 아래와 같이 /etc/init.d 디렉토리에 배치했습니다. 기본적으로 부팅 시 SSH 터널을 열고 싶습니다.

#! /bin/sh
# /etc/init.d/open_tunnels

### BEGIN INIT INFO
# Provides:          open_tunnels
# Required-Start:    $network $syslog $remote_fs
# Required-Stop:     $remote_fs $syslog 
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

case "$1" in
  start)
    echo "Running open_tunnels..."
    <ssh command>
    ;;
  stop)
    killall open_tunnels
    ;;
  *)
    echo "Usage: /etc/init.d/open_tunnels start"
    exit 1
    ;;
esac


exit 0

그런 다음 서비스를 추가했습니다.

insserv open_tunnels

그러나 시스템을 부팅하면 시스템 로그에 다음이 표시됩니다.

open_tunnels[522]: ssh: connect to host <IP> port 22: Network is unreachable

내 시스템에서 (로그인한 후) ssh 명령을 사용하고 있기 때문에 ssh 명령이 제대로 작동한다고 확신합니다. 시작시 실행되기를 원합니다.

여기서 뭔가 빠졌나요?

답변1

읽다https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/그 문제가 철저하게 처리될 수 있도록. 귀하의 주요 질문은 다음과 같습니다.

정확히 무엇이 필요한지 $network는 명확하지 않으며 로컬 구성에 따라 달라질 수 있습니다.

Systemd는 위 링크에서 언급한 것처럼 더 나은 도구를 제공합니다. 기본적으로, 당신은

[Unit]
Require = network-online.target
After = network-online.target

사용자 정의 서비스 파일에 추가하고 네트워크 관리 서비스가 좋은 결과를 제공하기를 바랍니다 network-online.target.

init 스크립트를 시스템 서비스 파일로 바꾸지 않으려면 디렉터리를 만들고 /etc/systemd/system/open_tunnels.service.d위의 3줄을 .conf해당 디렉터리의 모든 파일(확장자 포함)에 넣으세요. 이는 에 설명된 대로 systemd의 SysV init 호환성 계층에 의해 자동으로 생성된 서비스 설명을 향상시킵니다 man systemd.unit.

관련 정보