인터넷 연결에 따라 스크립트를 실행하는 방법


48

종종 sshfs를 사용하여 원격 드라이브를 마운트합니다. 이 마운트를 자동으로 사용하고 싶습니다. 그러나 .bashrc 또는 시작 스크립트에 마운트하면 무선 인터넷 연결이 아직 이루어지지 않아 마운트가 실패하는 경우가 많습니다.

누구나 연결할 때마다 bash scrip을 실행하거나 sshfs 드라이브를 자동 마운트하는 쉬운 방법을 알고 있습니까?

답변:


56

에 스크립트를 추가하십시오 /etc/network/if-up.d/. '.sh'확장자없이 스크립트 이름을 지정하십시오.

또한 스크립트 실행 chmod +x /etc/network/if-up.d/yourscriptname을 추가 한 후 필요한 권한을 부여하십시오.

켜져있을 때 스크립트를 트리거해야하는 네트워크 인터페이스 (예 : wlan0 또는 eth0)가 파일에 언급되어 있는지 확인하십시오 /etc/network/interfaces.


12
내부 스크립트에서 /etc/network/*.d/변수 $IFACE를 사용하여 연결중인 인터페이스를 알 수 있으므로 유선 연결 인 경우 프로 시저를 건너 뛸 수 있습니다.
Carlos Campderrós

이 작업을 수행 할 특정 네트워크를 지정하는 방법이 있습니까? 그것이 나의 홈 네트워크 일 때 나는 스크립트를하고 싶지만 네트워크가 나가고 싶지 않을 때 ...
Joshua Robison

3
이것은 실제로 전혀 작동하지 않는 것 같습니다. 터미널에서 ./를 사용하여 스크립트를 실행할 수 있기 때문에 스크립트가 작동한다는 것을 알고 있으며 작동하지만 연결을 해제하고 연결하면 스크립트가 전혀 호출되지 않습니다. 어쨌든 그들을 참조하기 위해해야 ​​할 일이 있습니까? if-up.d에 스크립트를 삭제하면 단계가 부족한 것 같습니다!
Joshua Robison

1
그들이 올바른 권한을 가지고 있는지 확인하십시오.
dedunumax

2
interfaces그것이 없을 때 정확히 들어가야 할 것을 추가하십시오 . 이를인가 auto wlan0하고 iface wlan0 inet dhcp그렇지 않으면 STH?
Cookie

25

편집자 주 : 오징어는 2012 년 이후 업데이트되지 않았으며 현재 우분투 리포지토리에 없습니다.

우분투 12.04

  • Install Cuttlefish : 특정 이벤트가 트리거 될 때 작업을 실행하여 컴퓨터에서 반사를 실현하는 간단한 도구입니다.
  • 오징어를 열고를 클릭하십시오 New.

    1 단계

    • 이름을 지정 하고 자극으로 활성화 옵션을 ON으로 변경하십시오.
    • 자극을 클릭하고 네트워크 범주를 선택한 다음 WLAN에 연결을 입력 하십시오 . 확인을 클릭하십시오.

    2 단계

    • 무선 네트워크의 SSID를 선택할 수도 있으며 시작시이를 확인할지 여부에 대한 옵션이 있습니다.

    3 단계

    • 이제 반응을 지정해야합니다. 반응 탭으로 이동하여 추가를 클릭하십시오. 범주에서 응용 프로그램 을 선택 하고 유형 에서 응용 프로그램 시작 (고급 모드) 을 선택하십시오 .

    4 단계

    • 이제 실행 옵션에서 실행할 스크립트를 지정하십시오. 스크립트에 매개 변수를 전달할 수도 있습니다.

    5 단계

    • 그리고 그게 다야! 또한 시작 응용 프로그램에 오징어를 추가해야합니다. 편집> 환경 설정으로 이동 하여 자동 시작 옵션을 활성화하십시오.

    6 단계


6
갑 오징어가 완전히 파손되어 언젠가 업데이트를 보지 못했습니다. Linux 용 Android의 Tasker 앱과 같은 것이 필요하기 때문에 더 많은 개발을 할 수 있기를 바랍니다. 아무도 etc / network / interfaces와 if-up 폴더와 스크립트를 망칠 필요가 없습니다. 클릭하거나 토글 할 수있는 항목 만주세요.
Joshua Robison

2

OP 질문의이 부분에 답하겠습니다. "이 마운트를 자동으로 사용하고 싶습니다."

네트워크 공유 자동 마운트에 가장 좋아하는 도구는 autofs입니다. https://help.ubuntu.com/community/Autofs

AutoFS는 모든 랩톱 및 워크 스테이션에 NAS를 마운트하기 위해 선택한 도구입니다.

" autofs는 필요에 따라 디렉토리를 자동으로 마운트하기위한 프로그램입니다. 자동 마운트는 액세스 할 때만 마운트되며 일정 기간 동안 사용하지 않으면 마운트 해제됩니다. 이로 인해 NFS / Samba 자동 마운트는 대역폭을 보존하고 더 나은 성능을 제공합니다. fstab에 통해 정적 마운트에 비해 전반적인 성능을 제공합니다. "


OP가 다른 답변을 이미 수락 했으므로 가능한 답변은 약간 늦을 수 있습니다. 당신의 도움은 그러나 당신이 더 나은에 노력을 집중함으로써 제공 될 수있다, 물론 감사입니다 대답없는 질문
Wayne_Yux

미안 웨인, RBell은 마지막 웃음을 얻었습니다. 패키지가 오래되어서 가장 좋은 대답은 (오징어 사용에 관한) 더 이상 관련이 없지만 autofs는 여전히 존재하지만이 게시물이 아니라면 그것을 보지 못했습니다. 고마워, RBell!
KlaymenDK

1

가장 쉽고 간단하며 쉬운 방법은 작업하려는 인터페이스에 up 명령을 추가하는 것입니다.

인터페이스는 "/ etc / network /"디렉토리에서 "interfaces"파일 이름으로 찾을 수 있습니다.

iface elan0 inet manual
    up filename.sh

그러면 elan0에 up 명령이 추가됩니다. 동시에 작업하려는 인터페이스에 이것을 제공하십시오. 하나의 탭 공간을 들여 쓰기하십시오.

파일에 실행 권한을 부여하십시오.

sudo chmod 755 filename.sh

1
환상적인! 에서 tun0관리하는 VPN 인터페이스 와 함께 작동 합니다 network-manager. 열쇠는의 사용이다 inet manual.
KrisWebDev

1

내가 아는 한, 다음에 /etc/network/if-up.d/추가했을 때 해결책이 작동하지 않았습니다 /etc/network/interfaces.

auto wlp58s0
iface wlp58s0 inet dhcp
post-up /home/augustin/Config/myscript.sh

재부팅 후 Wi-Fi가 시작됩니다.

그러나 일부 투쟁, 후 링크 , 무슨 일을하기에 스크립트를 추가하는 것이었다 /etc/NetworkManager/dispatcher.d/형태로 스크립트 및 다음과 같은 양식을 사용하여 우선 순위는 다음과 같습니다90myscript.sh90

#!/bin/bash

IF=$1
STATUS=$2

if [ "$IF" == "wlp58s0" ]
then
    case "$2" in
        up)
        # interface is up
        ;;
        down)
        # interface will be down
        ;;
        pre-up)
        # interface will be up
        ;;
        post-down)
        # interface is down
        ;;
        *)
        ;;
    esac
fi

시스템 수준에서 네트워크 구성을 제어하는 ​​사람 사이에 문제가 있으며 때로는 기본 network동작이 디스패처 뒤에 남아 있습니다.

또한 나처럼-파일을 더 나은 위치에 저장하기 위해 스크립트에 대한 심볼릭 링크를 사용하려는 사람들에게는 불행히도 그것은 나에게 효과적이지 않았습니다.

도움이 되었기를 바랍니다!


1

systemd 요즘 네트워킹을 인계 한 것 같습니다.

$ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 enp0s25          ether              n/a         unmanaged
  3 wlo1             wlan               n/a         unmanaged

3 links listed.

또한 인터페이스에 해당하는 장치가 있습니다

$ systemctl list-units |grep wlo1
sys-devices-pci0000:00-0000:00:1c.3-0000:24:00.0-net-wlo1.device                                                        loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)
sys-subsystem-net-devices-wlo1.device                                                                                   loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)

분명히 서비스 단위 파일에서 사용할 수 있습니다. 따라서 서비스 단위를 만들어 스크립트를 실행하고 내부에서 이와 비슷한 것을 사용하여 네트워크에서 조건부로 실행되도록하십시오.

BindsTo=sys-subsystem-net-devices-wlo1.device
After=sys-subsystem-net-devices-wlo1.device

행운을 빕니다! 나는 이것을 테스트하지 않았으므로 "마일리지가 다를 수 있습니다".

출처 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.