hao0089 发表于 2019-2-19 06:49:31

Ubuntu 联网后自动运行程序 监测网络连接

概要
  在Debian/Ubuntu的发行版本里,网络建立前、后和网络断开前、后都会到/etc/network/里运行相应目录下的脚本

[*]  if-down.d -- 网络关闭前
[*]  if-post-down.d -- 网络关闭后
[*]  if-pre-up.d -- 网络建立前
[*]  if-up.d -- 网络建立后
思路
  (1)在网络建立后,我们要在/etc/network/if-up.d/目录下增加一个自动连接***的脚本,这样可以保证只要是联网状态下就可以连接***
  #!/bin/bash
  #变量定义
  PATH=/sbin:/usr/sbin:/bin:/usr/bin
  config_path="/home/wangzhengyi/cloud-1/open***-client.o***"
  #导入环境变量
  . /lib/lsb/init-functions
  export PATH=$PATH
  #网络建立后运行open***
  log_daemon_msg "starting client open***"
  nohup open*** $config_path
  (2)在网络断开前,我们要结束掉所有的***进程,防止程序出现bug

[*]  首先,说一个bug,ubuntu的/etc/network/if-down.d/和/etc/network/if-post-down.d/目录下的脚本并不会在网络断开时执行,原因我google也没找到
[*]  强调,千万不要思维定式,花了几个小时的时间解决这个问题就是思维定式了,可以考虑写个监测脚本检测网络是否畅通,如果网络down掉则kill掉所有的***进程即可,然后crontab定时运行就ok了,上脚本代码
  #!/bin/bash
  #变量定义
  urls=("www.88181.com" "www.linuxidc.com" "www.6688.cc")
  http_code=("200" "301" "302" "404")
  count=${#urls
[*]}
  connected=0
  #检测网络
  for ((i = 0; i < $count; i ++))
  do
  url=${urls[$i]}
  result=$(curl -o /dev/null -s -m 10 -w %{http_code} $url)
  for flag in ${http_code
[*]}
  do
  if [ $flag = $result ];then
  connected=$(expr $connected + 1)
  fi
  done
  done
  #网络down时kill所有***进程
  if [ $connected -eq 0 ];then
  ***_pids=$(ps -aux |grep -i 'open***'|grep -v 'grep'|awk '{print $2}')
  for pid in ${***_pids
[*]}
  do
  kill -9 $pid
  done
  fi
  crontab定时运行
  * * * * * monitor_scripts

页: [1]
查看完整版本: Ubuntu 联网后自动运行程序 监测网络连接