月に1回程度の絶え間ない作業の過程で、USBモデムがハングすることが起こりました。 これにより、不便な点がありました。自宅のコンピューターにリモートでアクセスできず、映画を事前にアップロードできないことです。 リモートでは、この問題は修正できず、モデムの電源リセットのみが役立ちました。 唯一の方法は、特定の時間にインターネット上のサイトの可用性をチェックし、必要に応じてモデムを再起動するスクリプトを書くことでした。
私はインターネット上でいくつかの実装を見つけましたが、それらのどれも通常私のために機能しませんでした。 それで、私は好みと若い女性で私の番犬を書くことに決めました。 このトピックのスクリプトが基礎として採用されました。 資格が許す限り書き直され、外部オプションなどの新機能が追加されました。
CentOS 7にUSB 4Gモデムをインストールして構成します。
まず、不足しているパッケージをダウンロードする必要があります。
モデムを接続し、システムでどのように検出されるかを確認します。
次に、4Gモデムインターフェイスを設定する必要があります。
インターフェイスをオンまたはオフにしたときにインターネットを有効または無効にするスクリプトを作成します。
ここで、ttyUSB0はモデムポートです。
インターフェイスを上げて、接続を確認します。
yum install usb_modeswitch usb_modeswitch-data
モデムを接続し、システムでどのように検出されるかを確認します。
dmesg ip a
次に、4Gモデムインターフェイスを設定する必要があります。
vim /etc/sysconfig/network-scripts/ifcfg-wwp6s0u1i1
DEVICE="wwp6s0u1i1" NAME="wwp6s0u1i1" TYPE="Ethernet" ONBOOT="yes" BOOTPROTO="dhcp" HWADDR="XX:XX:XX:XX:XX:XX" NM_CONTROLLED="no" DNS1=127.0.0.1 DNS2=127.0.0.1 DNS3=127.0.0.1 NOZEROCONF="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" ZONE="external"
インターフェイスをオンまたはオフにしたときにインターネットを有効または無効にするスクリプトを作成します。
vim /sbin/ifup-pre-local
#!/bin/bash # PREUP="/etc/sysconfig/network-scripts/pre-up-${1:6}" if [ -x $PREUP ]; then exec $PREUP fi
vim /sbin/ifdown-pre-local
#!/bin/bash # PREDOWN="/etc/sysconfig/network-scripts/pre-down-$1" if [ -x $PREDOWN ]; then exec $PREDOWN fi
vim /etc/sysconfig/network-scripts/pre-up-wwp6s0u1i1
#!/bin/bash # echo -en 'AT^NDISDUP=1,1,"internet.yota"\r\n' > /dev/ttyUSB0
vim /etc/sysconfig/network-scripts/pre-down-wwp6s0u1i1
#!/bin/bash # echo -en 'AT^NDISDUP=1,0,"internet.yota"\r\n' > /dev/ttyUSB0
ここで、ttyUSB0はモデムポートです。
インターフェイスを上げて、接続を確認します。
ifup wwp6s0u1i1 ip a
スクリプト自体
#!/bin/bash export PATH="$PATH:/usr/sbin" SN="$(basename "$0")" function print_help() { printf "\n" printf ": %s options...\n" "$SN" printf ":\n" printf " -s .\n" printf " -i .\n" printf " -d lsusb -t.\n" printf " -n .\n" printf " -m , lsusb.\n" printf " -h .\n" printf "\n" } # , . if [[ $# = 0 ]]; then print_help && exit 1 fi while getopts ":s:i:d:n:m:h" opt ; do case $opt in s) SITE=$OPTARG; ;; i) IF=$OPTARG; ;; d) DEV=$OPTARG; ;; n) EP=$OPTARG; ;; m) MM=$OPTARG; ;; h) print_help exit 1 ;; *) printf " \n"; printf " %s -h\n" "$SN"; exit 1 ;; esac done if [[ "$SITE" == "" ]] || [[ "$IF" == "" ]] || [[ "$DEV" == "" ]] || [[ "$EP" == "" ]] || [[ "$MM" == "" ]] ; then printf "\n" printf " .\n" printf " : %s -h\n" "$SN" printf "\n" exit 1 fi M="$(lsusb | grep -w "$MM")" # lsusb if [[ "$M" != "" ]]; then # , if grep -w -q "$IF" /proc/net/dev; then # printf "\n" printf " %s %s\n" "$SITE" "$IF" printf "\n" if [[ "$EP" -ge 6 ]]; then printf " 5\n" exit 1 else printf " ...\n" flag="0" for i in {1..5}; do # 5 timeout -k 2 -s TERM 16 ping -w 14 -s 8 -c 1 -I "$IF" "$SITE" || flag=$((flag+1)) && printf ":%s/5 (:%s)\n" "$i" "$flag" # - if (("$flag" >= "$EP")); then break else read -r -t 1 > /dev/null fi done printf " : %s %s\n" "$flag" "$i" printf "\n" if (("$flag" >= "$EP")); then # 2 M="$(lsusb | grep "$MM")" # - printf " :\n" printf "%s\n" "$M" | cut -c 34- if ! [[ -d /sys/bus/usb/drivers/usb/"$DEV" ]]; then printf " Bus Port .\n" exit 1 else ifdown "$IF" # printf "%s" "$DEV" > "/sys/bus/usb/drivers/usb/unbind" && printf "%s" "$DEV" > "/sys/bus/usb/drivers/usb/bind" # # read -r -t 1 > /dev/null ifup "$IF" # fi fi fi else printf "\n" printf " %s \n" "$IF" printf "\n" exit 1 fi else printf " %s .\n" "$MM" fi
スクリプトは、/ usr / local / bin /にあります。
スクリプトを5分ごとに自動的に実行するには、タスクをcronに追加します。
crontab -e
*/5 * * * * /usr/local/bin/watchdog -m Huawei -s ya.ru -i wwp6s0u2i1 -n 3 -d 1-1 > /dev/null 2>&1
これはdmesgの出力であり、スクリプトの実行時にモデムがリセットされたことを示しています。
[181709.595498] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0 [181709.595568] option 1-1:1.0: device disconnected [181709.595798] huawei_cdc_ncm 1-1:1.1 wwp6s0u2i1: unregister 'huawei_cdc_ncm' usb-0000:06:00.0-1, Huawei CDC NCM device [181709.615005] option 1-1:1.0: GSM modem (1-port) converter detected [181709.616597] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0 [181709.623449] usb 1-1: MAC-Address: 0c:5b:8f:27:9a:64 [181709.623958] huawei_cdc_ncm 1-1:1.1: cdc-wdm0: USB WDM device [181709.624341] huawei_cdc_ncm 1-1:1.1 wwan0: register 'huawei_cdc_ncm' at usb-0000:06:00.0-1, Huawei CDC NCM device, XX:XX:XX:XX:XX:XX
スクリプトは理想からはほど遠いことをすぐに言わなければならないので、私は喜んでアドバイスと健全な批判を受け入れます。
また、 @ AlekseyNemiroというニックネームでToster.ruを使用しているユーザーに、スクリプトの最適化の支援に感謝したいと思います。
UPD 01/22/16 PATH変数にパスを追加するコマンドでスクリプトを補足しました。