วิธีรันสคริปต์ขึ้นอยู่กับการเชื่อมต่ออินเทอร์เน็ต


48

ฉันมักจะติดตั้งไดรฟ์ระยะไกลโดยใช้ sshfs ฉันชอบที่จะมีภูเขานี้โดยอัตโนมัติ อย่างไรก็ตามหากฉันติดตั้งในสคริปต์. bashrc หรือเริ่มทำงานของฉันการเมานต์มักล้มเหลวเนื่องจากยังไม่ได้ทำการเชื่อมต่ออินเทอร์เน็ตแบบไร้สาย

ไม่มีใครรู้วิธีที่ง่ายในการรัน bash scrip ทุกครั้งที่ทำการเชื่อมต่อหรือติดตั้ง sshfs drive อัตโนมัติ?

คำตอบ:


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

มีวิธีระบุเครือข่ายเฉพาะที่คุณต้องการทำสิ่งนี้หรือไม่? เมื่อมันเป็นเครือข่ายในบ้านของฉันฉันต้องการจะทำสคริปต์ แต่เมื่อ I'ts เครือข่ายออกและเกี่ยวกับฉันอาจไม่ต้องการที่จะ ...
โจชัวโรบินสัน

3
อันที่จริงดูเหมือนว่าจะไม่ทำงานเลย ฉันรู้ว่าสคริปต์ของฉันทำงานได้เพราะฉันสามารถเรียกใช้โดยใช้. / ในเทอร์มินัลและทำงานได้ แต่เมื่อฉันสลับปิดและการเชื่อมต่อสคริปต์จะไม่ถูกเรียกใช้เลย มีสิ่งใดบ้างที่ฉันต้องทำเพื่ออ้างอิงพวกเขาในบางเส้นทาง? วางสคริปต์ใน if-up.d ดูเหมือนว่าไม่มีขั้นตอนหรือไม่!?!
Joshua Robison

1
ตรวจสอบว่าพวกเขา hace แก้ไขสิทธิ์โปรด
dedunumax

2
โปรดเพิ่มสิ่งที่ควรจะเป็นinterfacesเมื่อไม่ได้มี มันเป็นauto wlan0และiface wlan0 inet dhcpหรืออื่นใด
Cookie

25

หมายเหตุจากบรรณาธิการ: Cuttlefish ยังไม่ได้รับการอัพเดตตั้งแต่ปี 2012 และไม่ได้อยู่ในที่เก็บ Ubuntu ปัจจุบันใด ๆ

Ubuntu 12.04

  • ติดตั้งCuttlefish : เครื่องมือง่ายๆที่ตระหนักถึงการตอบสนองบนคอมพิวเตอร์ของคุณโดยการดำเนินการเมื่อมีเหตุการณ์เฉพาะเกิดขึ้น
  • Newเปิดปลาหมึกและคลิกที่

    ขั้นตอนที่ 1

    • ตั้งชื่อและเปลี่ยนตัวเลือกActivated by stimulusเป็น ON
    • คลิกที่กระตุ้นให้เลือกหมวดหมู่เครือข่ายและพิมพ์การเชื่อมต่อ WLAN คลิกตกลง

    ขั้นตอนที่ 2

    • คุณยังสามารถเลือก SSID ของเครือข่ายไร้สายและคุณมีตัวเลือกว่าจะตรวจสอบสิ่งนี้เมื่อเริ่มต้นหรือไม่

    ขั้นตอนที่ 3

    • ตอนนี้คุณจะต้องระบุปฏิกิริยา ไปที่แท็บปฏิกิริยาและคลิกเพิ่ม เลือกแอปพลิเคชันจากหมวดหมู่และเริ่มแอปพลิเคชัน (ในโหมดขั้นสูง)จากประเภท

    ขั้นตอนที่ 4

    • ตอนนี้ระบุสคริปต์ที่คุณต้องการเรียกใช้ในตัวเลือกปฏิบัติการ คุณสามารถส่งพารามิเตอร์ไปยังสคริปต์

    ขั้นตอนที่ 5

    • และนั่นมัน! ตรวจสอบให้แน่ใจด้วยว่าคุณเพิ่ม Cuttlefish ในแอปพลิเคชันเริ่มต้น ไปที่แก้ไข> การตั้งค่าและเปิดใช้งานตัวเลือกเริ่มอัตโนมัติ

    ขั้นตอนที่ 6


6
ปลาหมึกแตกหักอย่างสมบูรณ์และไม่ได้เห็นการปรับปรุงในบางครั้ง ฉันหวังว่ามันจะได้รับการพัฒนามากขึ้นเพราะเราต้องการแอพ Tasker ของ Android สำหรับ Linux ไม่มีใครต้องการยุ่งกับ etc / network / interfaces และโฟลเดอร์และสคริปต์ if-up เพียงแค่ให้บางสิ่งที่ฉันสามารถคลิกหรือสลับเปิดและปิด
Joshua Robison

2

ฉันจะตอบคำถาม OP ส่วนนี้: "ฉันชอบที่จะให้ติดตั้งนี้โดยอัตโนมัติ"

เครื่องมือที่ฉันชอบสำหรับการแบ่งเครือข่ายอัตโนมัติคือ autofs: https://help.ubuntu.com/community/Autofs

AutoFS เป็นเครื่องมือของฉันในการเลือกใช้ NAS ของฉัน - สำหรับแล็ปท็อปและเวิร์กสเตชันทั้งหมดของฉัน

" autofs เป็นโปรแกรมสำหรับการติดตั้งไดเรกทอรีโดยอัตโนมัติตามความจำเป็น Auto-mount จะติดตั้งเมื่อเข้าถึงเท่านั้นและจะถูก unmount หลังจากไม่มีการใช้งานเป็นระยะเวลาด้วยเหตุนี้การเมาท์อัตโนมัติ NFS / Samba จะช่วยรักษาแบนด์วิธและข้อเสนอที่ดีกว่า ประสิทธิภาพโดยรวมเมื่อเปรียบเทียบกับการเมานท์แบบคงที่ผ่านทาง fstab "


คำตอบของคุณอาจเป็นไปได้ช้าเนื่องจาก OP ยอมรับคำตอบอื่นแล้ว แน่นอนว่าคุณได้รับความช่วยเหลือ แต่คุณอาจได้รับการบริการที่ดีขึ้นโดยมุ่งเน้นความพยายามของคุณไปยังคำถามที่ยังไม่ได้รับคำตอบ
Wayne_Yux

ขออภัย Wayne, RBell ได้หัวเราะครั้งสุดท้ายที่นี่ - คำตอบที่ดีที่สุด (เกี่ยวกับการใช้ Cuttlefish) ไม่เกี่ยวข้องกันอีกต่อไปเพราะแพ็คเกจนั้นล้าสมัย - แต่ autofs ยังคงมีอยู่และฉันไม่เห็นถ้าไม่ใช่สำหรับบทความนี้ ขอบคุณ RBell!
KlaymenDK

1

วิธีที่ง่ายที่สุดและง่ายที่สุดคือการเพิ่มคำสั่งขึ้นไปยังส่วนต่อประสานที่คุณต้องการใช้งาน

อินเตอร์เฟสสามารถพบได้ในไดเร็กทอรี "/ etc / network /" ภายใต้ชื่อ "อินเตอร์เฟซ" ของไฟล์

iface elan0 inet manual
    up filename.sh

นี่จะเพิ่มคำสั่ง up เป็น elan0 Simillarly มอบสิ่งนี้ให้กับอินเทอร์เฟซที่คุณต้องการใช้งาน อย่าลืมเยื้องพื้นที่แท็บหนึ่งแท็บ

ตรวจสอบให้แน่ใจว่าคุณให้สิทธิ์ดำเนินการกับไฟล์

sudo chmod 755 filename.sh

1
Fantastic! ทำงานร่วมกับ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

Wifi จะเริ่มหลังจากรีบูต

แต่หลังจากการดิ้นรนจากลิงค์นี้สิ่งที่ได้ผลก็คือการเพิ่มสคริปต์ลง/etc/NetworkManager/dispatcher.d/ในรูปแบบ90myscript.shที่90ระดับความสำคัญของสคริปต์และในรูปแบบต่อไปนี้:

#!/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.