অভ্যন্তরীণ আইপি বা বাহ্যিক আইপিতে ল্যাশ দেওয়ার সময় ওয়ান-লাইনারকে ব্যাশ করুন


0

আমি আমার টার্মিনাল স্ক্রিনে কিছুক্ষণ লুপ রাখতে চাই যা প্রতি সেকেন্ডে আমার সার্ভারে প্রবেশ করার চেষ্টা করে। এই মুহুর্তে এটি দেখতে এমন কিছু দেখাচ্ছে:

while true; do echo INTERNALIP && date >> $HOME/server.log &&\
    ssh -Y -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@192.168.1.10;\
     date;\
sleep 1; done

whileএকই মেশিনে ছাঁটাই করার জন্য আমার কাছে একই রকম বাশ লুপ রয়েছে তবে আমি বাইরের আইপি ব্যবহার করি যা অফিসের নেটওয়ার্কে না থাকাকালীন আমি সংযোগ করি:

while true; do echo EXTERNALIP && date >> $HOME/server.log &&\
    ssh -Y -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@NN.NNN.NN.NNN;\
     date;\
sleep 1; done

আমি যা করতে চাই তা হ'ল উভয়কে একক এক-লাইনারে সংহত করা, যা (1) প্রথমে ইন্টার্নালাইপের মাধ্যমে সংযোগ স্থাপনের চেষ্টা করে এবং যদি এটি ব্যর্থ হয়, তবে এক্সটার্নালাইপের মাধ্যমে সংযোগ দেওয়ার চেষ্টা করে। বাশে শর্তসাপেক্ষে আমি খুব বেশি পরিচিত নই, তাই এটি কীভাবে করব তা সম্পর্কে আমি নিশ্চিত নই।

কোন ধারনা?

উত্তর:


0

আপনার লুপের ভিতরে কেবল নীচের লাইনটি ব্যবহার করবেন না কেন:

ssh user@192.168.1.10 || ssh user@NN.NNN.NN.NNN

192.168.1.10 এর ssh এ ব্যর্থ হলে আমি কেবল এটি বুঝতে পারি তবে দ্বিতীয় এসএসটি ট্রিগার করা হবে। আপনি কি চান না?

আমি এসএসএস অপশন, লগ ইত্যাদির সমস্ত বিবরণ রেখে দিয়েছি

আরও ভাল হতে পারে এরকম কিছু:

( ssh user@192.168.1.10 && echo INTERNALIP ) || ( ssh user@NN.NNN.NN.NNN && echo EXTERNALIP )

এটি লগগুলিরও যত্ন নেওয়া উচিত এবং এটি একটি লাইনার। (এখনই এটি পরীক্ষা করার সুযোগ নেই তাই সতর্ক হোন।)


0

আপনার স্ক্রিপ্টটি আপনি যা চান ঠিক তেমন করে তা ধরে নিয়ে আমি এই জাতীয় কিছু চালাব:

while true; do echo INTERNALIP && date >> $HOME/server.log && \
    if [ "`find .external.pid -mtime 1 | egrep '.*'`" == "" ]; then \
        ssh -Y -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@192.168.1.10; \
        if [ $? == 255 ]; then touch -d "-1 day" .external.pid; fi; \
    else ssh -Y -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@NN.NNNN.NN.NNN; \
        if [ $? == 255 ]; then rm .external.pid; fi; \
    fi; \
    date; \
sleep 1; done

কোন সার্ভারটি ব্যবহার করা উচিত তা ট্র্যাক রাখতে এটি একটি .extern.pid ব্যবহার করে।

পিএস: আপনি সম্ভবত এটি পরিবর্তে ব্যবহার করবেন:

while true; do echo INTERNALIP && date >> $HOME/server.log && \
    if [ "`find .external.pid -atime +1s | egrep '.*'`" == "" ]; then \
        ssh -Y -o ServerAliveInterval=5 -o ServerAliveCountMax=1 -o user@192.168.1.10 'date'; \
        if [ $? == 255 ]; then touch .external.pid; fi; \
    else ssh -Y -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@NN.NNNN.NN.NNN 'date'; \
        if [ $? == 255 ]; then rm .external.pid; fi; \
    fi; \
sleep 1; done

লিনাক্সে, আমি এই ত্রুটিটি find: unknown predicate '-x'
পাচ্ছি

1
আমি "-x" অপসারণের কোডটি আপডেট করেছি: এটি চূড়ান্ত ফলাফলকে প্রভাবিত করে না
ডেভিড

আটাইম ম্যাকোক্সের চেয়ে লিনাক্সেও আলাদা
719016
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.