如何运行脚本,具体取决于Internet连接
我经常使用sshfs安装远程驱动器。 我很想自动安装这个。 但是,如果我将其挂载到.bashrc或启动脚本中,则挂载通常会失败,因为我的无线Internet连接尚未生成。
有没有人知道每次建立连接时执行bash脚本的简单方法,还是自动挂载sshfs驱动器?
将您的脚本添加到/etc/network/if-up.d/
。 为您的脚本命名,不要使用“.sh”扩展名。
此外,在添加脚本后运行chmod +x /etc/network/if-up.d/yourscriptname
以获得必要的权限。
确保文件/etc/network/interfaces
提到了在启动时应触发脚本的网络接口(例如wlan0或eth0)。
编者注:墨鱼自2012年以来未更新,并且不在任何当前的Ubuntu存储库中
Ubuntu 12.04
- 安装墨鱼 :一种简单的工具,通过在触发特定事件时执行操作来实现计算机的reflection。
-
打开墨鱼,点击新建 。
- 给它命名,然后将Activated by stimulus选项更改为ON。
- 单击Stimulus ,选择Network类别,然后键入Connect to WLAN 。 单击确定。
- 您还可以选择无线网络的SSID,并且可以选择是否在启动时进行检查。
- 现在你必须指定一个反应。 转到Reaction选项卡,然后单击add。 从类别中选择应用程序,从类型中选择启动应用程序(在高级模式下) 。
- 现在指定要在可执行选项中运行的脚本。 您甚至可以将参数传递给脚本。
- 就是这样! 还要确保在启动应用程序中添加墨鱼。 转到编辑>首选项并启用自动启动选项。
最好,最简单和最简单的方法是将up命令添加到您想要处理的接口。
接口可以在文件名“interfaces”下的“/ etc / network /”目录中找到
iface elan0 inet manual up filename.sh
这会将up命令添加到elan0。 Simillarly将这个提供给您想要使用的界面。 请记住缩进一个制表符空间。
确保您为该文件授予执行权限。
sudo chmod 755 filename.sh
我将回答OP问题的这一部分:“我希望自动安装此装载”
我最喜欢的自动挂载网络共享工具是autofs: https : //help.ubuntu.com/community/Autofs
AutoFS是我安装NAS的首选工具 – 适用于我的所有笔记本电脑和工作站。
“ autofs是一个根据需要自动挂载目录的程序。自动挂载仅在访问时挂载,并在一段时间不活动后卸载。因此,自动挂载NFS / Samba共享可以节省带宽并提供更好的function通过fstab与静态安装相比的整体性能。 “
就我而言, /etc/network/interfaces
/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
行为留在调度程序之后。
此外,对于那些希望 – 像我一样 – 尝试使用脚本的符号链接(将文件存储在更好的位置),不幸的是它对我不起作用。
希望这可以帮助!
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
祝好运! 我没有测试过这个,所以“你的里程可能会有所不同”。
资料来源: