저는 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
.