নির্দিষ্ট সময়ের জন্য ওয়াইফাই সংযোগ না থাকলে স্বয়ংক্রিয়ভাবে পুনরায় বুট করুন


14

দেখে মনে হচ্ছে যে আমার রাস্পবেরি পাই সার্ভারটি এলোমেলো সময়ের পরে ওয়াইফাই সংযোগ হারিয়েছে এবং কোনওভাবে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করতে সক্ষম নয়।

সাধারণত হাত দ্বারা করা একটি রিবুট সমস্যার সমাধান করে।

আমি প্রায় 30 মিনিটের পরে কোনও ওয়াইফাই না থাকলে এটিকে স্বয়ংক্রিয়ভাবে পুনরায় চালু করতে চাই। আমি এটা কিভাবে করবো?


5
আপনি কি ইন্টারফেসটি নীচে নেওয়ার এবং এটিকে আবার আনার চেষ্টা করেছেন? আপনার ওয়্যারলেস কার্ডের জন্য কার্নেল মডিউলটি আনলোড এবং পুনরায় লোড করার বিষয়ে কীভাবে? রিবুট না করে কার্ডটি পুনরায় সেট করতে আপনি করতে পারেন এমন আরও কিছু থাকতে পারে।
hololeap

1
হ্যাঁ এটি সম্ভবত কাজ করবে, তবে এখানে মূল সমস্যাটি কীভাবে এটি স্বয়ংক্রিয়ভাবে সনাক্ত করা যায় এবং তারপরে উপযুক্ত ক্রিয়া সম্পাদন করা।
ক্ল্যাম্প করুন

উত্তর:


12

এটি কেবল ধাপে ধাপে নির্দেশাবলী সহ ওয়ারউইকের উত্তর।


  1. আপনার হোম ফোল্ডারে নিম্নলিখিত শেল স্ক্রিপ্ট তৈরি করুন:

    check_inet.sh

    #!/bin/bash
    
    TMP_FILE=/tmp/inet_up
    
    # Edit this function if you want to do something besides reboot
    no_inet_action() {
        shutdown -r +1 'No internet.'
    }
    
    if ping -c5 google.com; then
        echo 1 > $TMP_FILE
    else
        [[ `cat $TMP_FILE` == 0 ]] && no_inet_action || echo 0 > $TMP_FILE
    fi
    
  2. অনুমতিগুলি পরিবর্তন করুন যাতে এটি কার্যকর হয়

    $ chmod +x check_inet.sh
    
  3. /etc/crontabব্যবহার করে সম্পাদনা sudoকরুন এবং নিম্নলিখিত লাইনটি যুক্ত করুন ( yournameআপনার প্রকৃত ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন করুন ):

    */30 * * * * /home/yourname/check_inet.sh
    

5

একটি উপায় হ'ল মূলের ক্রোনটিতে এমন একটি এন্ট্রি রাখা যা প্রতি 30 মিনিটে স্ক্রিপ্ট চালায়। স্ক্রিপ্টটি সম্ভবত ওয়াইফাই সংযোগ পরীক্ষা করবে pingএবং সংযোগের জন্য / টিএমপি - ১-এ কোনও ফাইলের ফলাফল লিখবে, যদি তা না থাকে তবে 0। এরপরে স্ক্রিপ্টটির পুনরাবৃত্তিগুলি সেই ফাইলটি চেক করবে এবং যদি এটি 0 হয় এবং WIFI সংযোগটি এখনও খারাপ থাকে, একটি init 6কমান্ড চালান ।


3

আমি মনে করি হোলোলিপ সলিউশন কাজ করছে।

আমার দ্রবণটি একটি কার্যক্ষম নেটওয়ার্ক সংযোগের জন্য প্রতি এন মিনিটে (আপনি কীভাবে আপনার ক্রন্টব কনফিগার করবেন তার উপর নির্ভর করে) পরীক্ষা করে। যদি চেক ব্যর্থ হয় তবে আমি ব্যর্থতার উপর নজর রাখি। যখন ব্যর্থতা গণনা হয়> 5 আমি ওয়াইফাই পুনরায় চালু করার চেষ্টা করি (ওয়াইফাই পুনরায় চালু না হলে আপনি রাস্পবেরি পুনরায় বুট করতে পারেন, মন্তব্যগুলি দেখুন)।

এখানে সর্বদা স্ক্রিপ্টের সর্বশেষতম সংস্করণ সম্বলিত একটি গীটহাব রেপো রয়েছে: https://github.com/ltpitt/bash-network-repair-automation

এখানে, স্ট্যাকেক্সচেঞ্জের সাধারণ নীতি অনুসারে (সমস্ত উত্তরগুলিতে কেবল লিঙ্ক থাকা উচিত নয়), ফাইল নেটওয়ার্ক_চেক.শ ফাইলও, আপনার পছন্দ মতো যে কোনও ফোল্ডারে এটি অনুলিপি করে আটকান, নির্দেশাবলী ইনস্টল করা স্ক্রিপ্টের মন্তব্যে রয়েছে।

#!/bin/bash
# Author:
# twitter.com/pitto
#
# HOW TO INSTALL:
#
# 1) Install ifupdown and fping with the following command:
# sudo apt-get install ifupdown fping
#
# 2) Then install this script into a folder and add to your crontab -e this row:
# */5 * * * * /yourhome/yourname/network_check.sh
#
# Note:
# If you want to perform automatic repair fsck at reboot
# remember to uncomment fsck autorepair here: nano /etc/default/rcS

# Let's clear the screen
clear

# Write here the gateway you want to check to declare network working or not
gateway_ip='www.google.com'

# Here we initialize the check counter to zero
network_check_tries=0

# Here we specify the maximum number of failed checks
network_check_threshold=5

# This function will be called when network_check_tries is equal or greather than network_check_threshold
function restart_wlan0 {
    # If network test failed more than $network_check_threshold
    echo "Network was not working for the previous $network_check_tries checks."
    # We restart wlan0
    echo "Restarting wlan0"
    /sbin/ifdown 'wlan0'
    sleep 5
    /sbin/ifup --force 'wlan0'
    sleep 60
    # If network is still down after recovery and you want to force a reboot simply uncomment following 4 rows
    #host_status=$(fping $gateway_ip)
    #if [[ $host_status != *"alive"* ]]; then
    #    reboot
    #fi
}

# This loop will run network_check_tries times and if we have network_check_threshold failures
# we declare network as not working and we restart wlan0
while [ $network_check_tries -lt $network_check_threshold ]; do
    # We check if ping to gateway is working and perform the ok / ko actions
    host_status=$(fping $gateway_ip)
    # Increase network_check_tries by 1 unit
    network_check_tries=$[$network_check_tries+1]
    # If network is working
    if [[ $host_status == *"alive"* ]]; then
        # We print positive feedback and quit
        echo "Network is working correctly" && exit 0
    else
        # If network is down print negative feedback and continue
        echo "Network is down, failed check number $network_check_tries of $network_check_threshold"
    fi
    # If we hit the threshold we restart wlan0
    if [ $network_check_tries -ge $network_check_threshold ]; then
        restart_wlan0
    fi
    # Let's wait a bit between every check
    sleep 5 # Increase this value if you prefer longer time delta between checks
done

1/26/2018 সম্পাদনা করুন: স্ক্রিপ্টটি স্মৃতিতে চালিত হতে এবং রাস্পবেরির এসডি কার্ডে লেখা এড়াতে আমি টেম্প ফাইলগুলি সরিয়েছি।


1
এই স্ক্রিপ্ট অস্থায়ী সংযোগ বিচ্ছিন্ন পুনরায় আরম্ভ এড়ানো। দুর্দান্ত, ধন্যবাদ!
ওয়েজিক্স

1
আপনি এই স্ক্রিপ্টে একটি বড় পরিবর্তন করেছেন বলে মনে হচ্ছে। আমি এটি বুঝতে পেরেছি, পূর্ববর্তী সংস্করণটি স্টাফগুলি (tmp ফাইলগুলি আপডেট করার সাথে সাথে) করে একটি পাস করবে এবং প্রস্থান করবে। এটিতে কোনও লুপ ছিল না; বরং প্রতি পাঁচ মিনিটে এটি চালানোর জন্য ক্রোন নির্ভর করে। যদি নেটওয়ার্কটি টানা পাঁচটি চেকের জন্য ডাউন হয়ে থাকে (অর্থাত্ প্রায় আধা ঘণ্টার জন্য), স্ক্রিপ্টটি নেটওয়ার্কটিকে পুনরায় সেট করার চেষ্টা করবে। এটি প্রশ্নের উত্তরের উত্তর বলে মনে হয়েছিল, যদিও এটি টিএমপি ফাইলগুলিতে লিখেছিল তা কিছুটা ব্যর্থতা ছিল। … (চালিয়ে যাওয়া)
স্কট

(চালিয়ে যাওয়া) ... নতুন সংস্করণে একটি লুপ থাকে এবং প্রতি পাঁচ সেকেন্ডে নেটওয়ার্কটি পরীক্ষা করে । যদি নেটওয়ার্কটি টানা পাঁচটি চেকের জন্য নিচে থাকে (যেমন, প্রায় অর্ধ মিনিটের ব্যবধানে ), স্ক্রিপ্টটি নেটওয়ার্কটি পুনরায় সেট করার চেষ্টা করার জন্য কাজ করে। (প্রশ্নটি যা জিজ্ঞাসা করেছে তার থেকে এটি আলাদা বলে মনে হচ্ছে)) এবং এখানে এটি কিছুটা অদ্ভুত হয়ে যায়। এটি পর পর পাঁচবার নেটওয়ার্ক ব্যর্থতা সনাক্ত করে এবং নেটওয়ার্কটি পুনরায় সেট করার পরে, স্ক্রিপ্টটি প্রস্থান করে। (এবং, ঘটনাক্রমে, নেটওয়ার্কটি আসলে ফিরে এসেছে কিনা তা যাচাই করেই এটি বেরিয়ে যায়)) ... (চালিয়ে যাওয়া)
স্কট

(চালিয়ে যাওয়া) ... তবে যতক্ষণ না নেটওয়ার্ক চালু থাকবে ততক্ষণ স্ক্রিপ্টটি চিরতরে চলতে থাকবে, নেটওয়ার্কটি ব্যর্থ হওয়ার জন্য অপেক্ষা করছে। এদিকে ক্রোন প্রতি পাঁচ মিনিটে স্ক্রিপ্টটি পুনরায় চালু করতে থাকে। নেটওয়ার্কটি যদি এক ঘন্টা অবধি থাকে, তবে স্ক্রিপ্টটির এক ডজন অনুলিপি চলবে। এবং যদি নেটওয়ার্কের ব্যর্থ তারপর, ঐ ডজন প্রসেস যুদ্ধ একে অপরের সাথে অ্যাসিঙ্ক্রোনাস করছেন করব ifdownএবং ifup, হয়তো নেটওয়ার্কের ফিক্সিং এবং হয়ত না। ……………………………………………………………………………………… আমি যদি কিছু ভুল বুঝে থাকি তবে দয়া করে আমাকে তা ব্যাখ্যা করুন। … (চালিয়ে যাওয়া)
স্কট

(চালিয়ে যাওয়া) ... (1) আপনি যদি এক বছরেরও বেশি সময় ধরে পোস্ট করা কোনও উত্তরটির এত বড় পুনরায় নকশা তৈরি করতে যাচ্ছেন তবে আপনি যা করেছেন তা আপনার বলা উচিত। "আমি স্ক্রিপ্টটিকে স্মৃতিতে চালিয়ে যেতে দিতে টেম্প ফাইলগুলি সরিয়েছি" আপনার পরিবর্তনের পর্যাপ্ত বিবরণ নয়। (২) দেখে মনে হচ্ছে আপনার কাছে বর্গক্ষেত্রের খোঁচা, গোলাকার খোঁচা, বর্গক্ষেত্র এবং গর্তের ছিদ্রগুলির একটি সংগ্রহ রয়েছে এবং আপনি সেগুলি সঠিকভাবে মেলে নি। আপনি হয় স্ক্রিপ্টটি প্রস্থান করার জন্য বাইরে বেরোনোর ​​জন্য এটি পরিবর্তন করতে হবে যখন এটি দেখেছে যে নেটওয়ার্কটি উঠে এসেছে, বা চিরকালের জন্য চালানোর জন্য এটি পরিবর্তন করুন, এবং একবারে স্ক্রিপ্ট শুরু করার জন্য ক্রোনট্যাব পরিবর্তন করুন (অর্থাত্ বুট সময়)।
স্কট

0

আমি আমার মাল্টিটেক এমটাক লোরাওয়ান গেটওয়ে (কোনও ফপিং নয়) এর জন্য পিটোর স্ক্রিপ্ট পরিবর্তন করেছি। আমি একটি লগ ফাইল যুক্ত।

#!/bin/bash
# Author: 
# twitter.com/pitto
#
# HOW TO INSTALL:
#
# 1) Install ifupdown with the following command:
# sudo apt-get install ifupdown
#
# 2) Create files in any folder you like (ensure that the filename variables, set below,
# match the names of the files you created) with the following commands:
# sudo touch /home/root/scripts/network_check_tries.txt &&
#                               sudo chmod 777 /home/root/network_check_tries.txt
# sudo touch /home/root/scripts/N_reboots_file.txt      &&
#                               sudo chmod 777 /home/root/N_reboots_file.txt
# sudo touch /home/root/scripts/network_check.log       &&
#                               sudo chmod 777 /home/root/network_check.log
#
# 3) Then install this script into a folder and add to your crontab -e this row:
# */5 * * * * /yourhome/yourname/network_check.sh
#
# Note:
# If additionally you want to perform automatic repair fsck at reboot
# remember to uncomment fsck autorepair here: nano /etc/default/rcS

# Specify the paths of the text file where the network failures count, reboot count,
# and log will be held:
network_check_tries_file='/home/root/network_check_tries.txt'
N_reboots_file='/home/root/N_reboots_file.txt'
log_file='/home/root/network_check.log'

# Save file contents into corresponding variables:
network_check_tries=$(cat "$network_check_tries_file")
N_reboots=$(cat "$N_reboots_file")


# If host is / is not alive we perform the ok / ko actions that simply involve
# increasing or resetting the failure counter
ping -c1 google.com
if [ $? -eq 0 ]
then
    # if you want to log when there is no problem also,
    # uncomment the following line, starting at "date".
    echo 0 > "$network_check_tries_file" #&& date >> "$log_file" && echo -e "-- Network is working correctly -- \n" >> "$log_file"
else
    date >> "$log_file" && echo -e "-- Network is down... -- \n" >> "$log_file" && echo "$(($network_check_tries + 1))" > "$network_check_tries_file"
fi

# If network test failed more than 5 times (you can change this value to whatever you
# prefer)
if [ "$network_check_tries" -gt 5 ] 
then
    # Time to restart ppp0
    date >> "$log_file" && echo "Network was not working for the previous $network_check_tries checks." >> "$log_file" && echo "Restarting ppp0" >> "$log_file"
    killall pppd
    sleep 20
    /usr/sbin/pppd call gsm
    sleep 120
    # Then we check again if restarting wlan0 fixed the issue;
    # if not we reboot as last resort
    ping -c1 google.com
    if [ $? -eq 0 ]
    then
        date >> "$log_file" && echo -e "-- Network is working correctly -- \n" >> "$log_file" && echo 0 > "$network_check_tries_file"
    else
        date >> "$log_file" && echo -e  "-- Network still down after ifdownup... reboot time!-- \n" >> "$log_file" && echo 0 > "$network_check_tries_file" && echo "$(($N_reboots + 1))" > "$N_reboots_file" && reboot
    fi
fi

(1) আপনি এখনও ifupdownসেগুলি / সেগুলি ব্যবহার না করে কেন কথা বলছেন ? (২) আপনি কেন gateway_ipভেরিয়েবল থেকে হার্ড-কোডেড ধ্রুবক হিসাবে পরিবর্তন করলেন?
স্কট

হাই স্কট, আমি আইফড আইফড মন্তব্য মন্তব্য করতে ভুলে গেছি। আমি হার্ডকোডযুক্ত গেটউই_আইপি পরিবর্তন করতে ভুলে গেছি।
ব্যবহারকারী 3036425

নিস! আমি একটি নতুন সংস্করণ যুক্ত করেছি যা টেম্প ফাইল ব্যবহার করছে না (রাস্পবেরির এসডি তে লেখা এত দুর্দান্ত ধারণা ছিল না), আপনি আমার উত্তরে এটি পরীক্ষা করতে পারেন।
পিট্টো

এই স্ক্রিপ্টটি বেশ কয়েকটি ইস্যু উত্তরাধিকার সূত্রে পেয়েছে যা পিটোর স্ক্রিপ্টের মূল সংস্করণে ছিল (যা পরবর্তীকালে সংশোধন করা হয়েছে): (1) যদি নেটওয়ার্ক 00:00:01 (মধ্যরাতের পরে এক সেকেন্ড) শুরু হয়, স্ক্রিপ্টটি হবে না 00:35 অবধি প্রতিক্রিয়া করুন (অর্থাত্ 35 মিনিট পরে সপ্তম চেক-এ), কারণ, যদিও এটি network_check_tries_fileফাইলের মান বাড়িয়ে তোলে (যখন pingব্যর্থ হয়), এটি network_check_triesভেরিয়েবলকে বাড়িয়ে তোলে না । … (চালিয়ে যাওয়া)
স্কট

(করণীয়) ... সুতরাং স্ক্রিপ্টটি সাত বার চালিত হয় (এ্যাড, 00:10, 00:15, 00:20, 00:25, 00:30, এবং 00:35) network_check_tries0, 1 এর সমান সহ 2, 3, 4, 5, এবং 6 - এবং এটি কেবলমাত্র সপ্তম প্রার্থনা ( network_check_tries6 এর সমান) দ্বারা if [ "$network_check_tries" -gt 5 ]পরীক্ষা সফল হয়। যুক্তিযুক্তভাবে, এটি সঠিক আচরণ। যতক্ষণ না স্ক্রিপ্টটি জানে, নেটওয়ার্কটি 00:04:59 এ নেমে যেতে পারে, সুতরাং আপনি 30 মিনিটের সময়কালের আওতাভুক্ত করেছেন তা নিশ্চিত হতে টানা সাতটি ব্যর্থতা লাগে। … (চালিয়ে যাওয়া)
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.