데비안-인터넷 연결이 준비 되 자마자 시작시 스크립트를 실행하는 방법은 무엇입니까? 연결에서만. 이것에 대한 더미 스크립트를 게시하고 주어진 조건에서

데비안 7 Wheezy를 실행 중이며 인터넷에 완전히 연결되는 즉시 시작시 일부 화면을 시작해야합니다. 그러나 인터넷 연결이 끊어지고 다시 연결된 경우에는 그렇지 않습니다. 따라서 부팅 후 첫 번째 기능성 인터넷 연결에서만.

이것에 대한 더미 스크립트를 게시하고 주어진 조건에서 스크립트를 어디에 넣고 실행할 수 있는지 알려주십시오.

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


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



답변

스크립트를 /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.


답변

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

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

시스템에서 systemd를 실행중인 경우 수명주기 및 실행 환경을 제어하고 네트워크 시작 및 실행과 같은 스크립트 시작을위한 사전 조건을 제공하는 시스템 서비스로 실행되도록 스크립트를 구성 할 수 있습니다.

자신의 서비스에 권장되는 폴더는 /etc/systemd/system/다른 옵션 /lib/systemd/system이지만 일반적으로 OOTB 서비스에만 사용되어야합니다.

예를 들어 다음과 같이 파일을 작성하십시오 sudo vim /etc/systemd/system/autossh.service.

[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
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
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와 같은 기존 시스템 변수에 대해 가정하지 마십시오. Environment스크립트에 특정 변수를 정의해야하는 경우 키를 사용하십시오 . set -xbash 스크립트 맨 위에 추가 한 다음 실행 systemctl status my_service하면 스크립트가 실패한 이유를 식별하는 데 도움이 될 수 있습니다. tumb의 원칙으로 항상을 포함하여 모든 것에 절대 경로 를 사용하거나을 echo추가하여 $ PATH를 명시 적으로 정의하십시오 Environment=MYVAR=abc.


답변

인터넷 연결은 /etc/rc6.d/아마도 항목에 의해 발생합니다 S35networking. 해당 파일을 변경하고 끝에 명령을 삽입하거나 파일에 /etc/init.d/mystuff링크 /etc/rc0.d/S36mystuff를 추가하고 명령을 삽입하면 네트워크가 시작되는 즉시 시작됩니다.


답변