আমি আমার সাবনেটে লিনাক্স সার্ভারের একটি গোষ্ঠী আছে যা আমি একটি মাস্টার মেশিন থেকে দূরবর্তীভাবে শাটডাউন করতে সক্ষম হতে চাই। অ-মাস্টার মেশিনগুলি আগে থেকেই মাস্টারের সাথে সমন্বয় করতে চায় না, যেমন তার আইপি ঠিকানা ইত্যাদি। তাই ব্রডকাস্ট বা মাল্টিকাস্ট বার্তাগুলির কাছাকাছি কিছু কিছু একটি সুস্পষ্ট পদ্ধতি বলে মনে হয়।
আমি ইতিমধ্যে সঙ্গে একটি সমাধান বাস্তবায়িত করেছি socat
কিন্তু আমি ভাবছিলাম, যদি কম ভাল হ'ল সমাধান হতো যেমন উদার সমাধান। SNMP বা Bonjour মত প্রতিষ্ঠিত multicast সচেতন সেবা ব্যবহার করে?
নিম্নরূপ আমার সমাধান। আমি চালানো সমস্ত অ-মাস্টার মেশিনে:
$ socat UDP4-RECVFROM:6666,broadcast,fork SYSTEM:'hostname; shutdown now'
এই বলে socat
6666 পোর্টে সম্প্রচারের বার্তাগুলি শোনার জন্য এবং যখন এটি একটি গ্রহণ করে তখন এটি হোস্টনামটি ফিরিয়ে দেয় এবং মেশিনটি বন্ধ করে দেয়।
এখন একই সাবনেটের যে কোনও মেশিন নিম্নলিখিত কমান্ডের সাহায্যে চলমান সমস্ত মেশিন বন্ধ করে দিতে পারে (এটি ইনপুটের জন্য অপেক্ষা করে তাই কিছু লিখুন, উদাঃ। bye
):
$ socat STDOUT UDP4-DATAGRAM:255.255.255.255:6666,broadcast
bye
এই বার্তা সম্প্রচার করা হবে (এই ক্ষেত্রে bye
), socat
তারপরে 6666 পোর্টে সম্প্রচার বার্তাগুলির জন্য শোনাচ্ছে এমন সমস্ত মেশিনগুলির দ্বারা হোস্টনামগুলি আউটপুট আউট করবে।
স্পষ্টতই এই পদ্ধতির সাথে কোন সুরক্ষা নেই - যদি একই সাবনেটের কোনও যন্ত্র 6666 পোর্টে কিছু প্রচার করে তবে সিস্টেমগুলি বন্ধ হয়ে যাবে। শুধু একটি চলমান পরিবর্তে - একটি সহজ অতিরিক্ত স্তর যোগ করতে পারে hostname; shutdown now
কেউ একটি স্ক্রিপ্ট চালাতে পারে যা প্রকৃতপক্ষে সম্প্রচারিত হয় তা পরীক্ষা করে এবং শুধুমাত্র যদি বন্ধ থাকে তবে। শুধুমাত্র আগ্রহী পক্ষের পরিচিত হওয়া উচিত যে একটি দীর্ঘ র্যান্ডম সংখ্যা দেখা যায়।
socat
শুরুতে একটি মেশিনে উপরে কমান্ড। দেখ gist.github.com/george-hawkins/21f98e4061fed8d4bb3d9183093c0726