Ubuntu 聯網後自動執行程式 監測網路連線

2022-08-11 17:03:17 字數 1595 閱讀 4338

之前的一篇部落格介紹了利用update-rc.d管理ubuntu開機啟動執行的程式,鏈結見:update-rc.d管理ubuntu開機啟動程式 ,當時想解決的問題是開機啟動自動連線vpn,但是這種方法可能導致vpn程序僵死狀態,因為vpn的鏈結是跟網絡卡狀態相關的,因此這裡介紹一種聯網後自動執行自定義程式的方法

在debian/ubuntu的發行版本裡,網路建立前、後和網路斷開前、後都會到/etc/network/裡執行相應目錄下的指令碼

(1)在網路建立後,我們要在/etc/network/if-up.d/目錄下增加乙個自動連線vpn的指令碼,這樣可以保證只要是聯網狀態下就可以連線vpn

#!/bin/bash

#變數定義

path=/sbin:/usr/sbin:/bin:/usr/bin

config_path="/home/wangzhengyi/cloud-1/openvpn-client.ovpn"

#匯入環境變數

. /lib/lsb/init-functions

export path=$path

#網路建立後執行openvpn

log_daemon_msg "starting client openvpn"

nohup openvpn $config_path

(2)在網路斷開前,我們要結束掉所有的vpn程序,防止程式出現bug

首先,說乙個bug,ubuntu的/etc/network/if-down.d/和/etc/network/if-post-down.d/目錄下的指令碼並不會在網路斷開時執行,原因我google也沒找到

強調,千萬不要思維定式,花了幾個小時的時間解決這個問題就是思維定式了,可以考慮寫個監測指令碼檢測網路是否暢通,如果網路down掉則kill掉所有的vpn程序即可,然後crontab定時執行就ok了,上指令碼**

#!/bin/bash

#變數定義

#檢測網路

for ((i = 0; i < $count; i ++))

do url=$

result=$(curl -o /dev/null -s -m 10 -w % $url)

for flag in $

do if [ $flag = $result ];then

connected=$(expr $connected + 1)

fidone

done

#網路down時kill所有vpn程序

if [ $connected -eq 0 ];then

vpn_pids=$(ps -aux |grep -i 'openvpn'|grep -v 'grep'|awk '')

for pid in $

do kill -9 $pid

done

fi

crontab定時執行

* * * * * monitor_scripts

ubuntu 後台執行程式

在使用伺服器時,我們希望後台執行乙個程式,不占用當前視窗。ubuntu中可以使用nohup命令實現這個功能。nohup sh test.sh 執行上述命令後,系統會在後台執行命令 sh test.sh。同時,會生成輸出的日誌檔案,預設為nohup.out檔案。這種命令方式有個缺點,隨著命令的執行,n...

linux自動執行程式

linux 的啟動指令碼位於 etc init.d rcs 注rcs中 s是大寫字母 vi etc init.d rcs 進入vi後,按i 編輯.移動上下左右鍵到,你想插入的位置,然後打字。這時跟記事本是一樣的。打完字後,按esc 然後輸入 wq 注,第乙個字元是冒號 也要輸入 就儲存退出了。若想自...

Liunx自動執行程式

1.編輯 自動執行指令碼 crontab e 2.加入指令碼 8 sh home admin scm build.sh 1 tmp crontab.log 18 sh home admin scm build.sh 1 tmp crontab.log 系統會在 var spool cron 下生成與...