데비안 - 인터넷 연결이 가능해지면 부팅 시 스크립트를 어떻게 실행하나요?

데비안 - 인터넷 연결이 가능해지면 부팅 시 스크립트를 어떻게 실행하나요?

저는 Debian 7 Wheezy를 실행하고 있으며 인터넷에 완전히 연결되면 부팅 시 시작할 화면이 필요합니다. 단, 인터넷 연결이 중단되었다가 다시 연결되는 경우에는 그러하지 않습니다. 따라서 시작 후 처음으로 사용 가능한 인터넷 연결에서만 가능합니다.

이에 대한 더미 스크립트를 게시하고 이를 어디에 배치하고 주어진 조건에서 실행되도록 할 수 있습니까?

스크립트는 화면을 시작한 다음 종료하기만 하면 되지만 화면은 계속되어야 합니다.


편집하다 이 폴더에 대해 들었습니다 /etc/network/if-up.d/. 그러나 인터넷 연결이 끊어졌다가 다시 연결되는 경우 스크립트가 다시 실행되지 않도록 하려면 어떻게 해야 합니까?

답변1

스크립트를 넣고 /etc/network/if-up.d실행 가능하게 만드세요. 네트워크 인터페이스가 나타날 때마다 자동으로 실행됩니다.

부팅할 때마다 처음에만 작동하도록 하려면 처음 이후에 생성한 플래그 파일이 있는지 확인하도록 합니다. 예:

#!/bin/sh

FLAGFILE=/var/run/work-was-already-done

case "$IFACE" in
    lo)
        # The loopback interface does not count.
        # only run when some other interface comes up
        exit 0
        ;;
    *)
        ;;
esac

if [ -e $FLAGFILE ]; then
    exit 0
else
    touch $FLAGFILE
fi

: here, do the real work.

답변2

매우 적합한 직업입니다systemd.

스크립트를 시스템 서비스로 실행

시스템이 실행 중인 경우체계, 그런 다음 수명 주기 및 실행 환경에 대한 제어는 물론 네트워크 가동 및 실행, 실패 시 다시 시작 등과 같은 스크립트 시작을 위한 전제 조건을 제공하는 시스템 서비스로 실행되도록 스크립트를 구성할 수 있습니다.

귀하의 서비스에 권장되는 폴더는 다음과 같습니다. /etc/systemd/system/또 다른 옵션은 이지만 /lib/systemd/system일반적으로 OOTB 서비스에만 사용해야 합니다.

다음과 같은 파일을 만듭니다 sudo vim /etc/systemd/system/autossh.service.

[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target

[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
# By default type 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|exec|forking|oneshot|dbus|notify|idle
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

이제 서비스를 테스트할 수 있습니다.

sudo systemctl start autossh

서비스 상태를 확인하세요.

systemctl status autossh

서비스 중단:

sudo systemctl stop autossh

서비스가 예상대로 작동하는지 확인한 후 다음 명령을 사용하여 활성화할 수 있습니다.

sudo systemctl enable autossh

참고: 보안을 위해 systemd스크립트는 스크립트가 실행되는 방식과 유사하게 제한된 환경에서 실행되므로 crontab기존 시스템 변수(예: $PATH 또는 의 변수 등)에 대해 어떠한 /.bashrc가정도 하지 마십시오 ~/.zshrc. Environment키(스크립트가 특정 변수를 정의해야 하는 경우). set -xBash 스크립트 상단에 추가한 후 실행하면 systemctl status my_service스크립트가 실패한 이유를 파악하는 데 도움이 될 수 있습니다. 원칙적으로 항상 사용하십시오.절대 경로모든 것에 대해 를 추가 echo하거나 $PATH를 명시적으로 정의합니다 Environment=MYVAR=abc.

답변3

/etc/rc6.d/인터넷 연결은 의 항목으로 시작될 수 있습니다 S35networking. 파일을 변경하고 마지막에 명령을 삽입하거나 파일을 추가 하고 파일에 /etc/init.d/mystuff링크한 다음 명령을 삽입하면 네트워크가 시작되자마자 작업이 시작됩니다./etc/rc0.d/S36mystuff

관련 정보