之前的一篇部落格介紹了利用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 下生成與...