VPN-এর সঙ্গে SSH সেশন মরে যায়: tmux নাকি জব রানার?
পুনরায় সংযুক্ত টানেল পুরোনো SSH সকেটকে জীবিত করে না। কাজটির জন্য পুনরায় অ্যাটাচ করার টার্মিনাল সেশন দরকার, নাকি রেকর্ড করা ফলাফলসহ একটি জব — সেটি ঠিক করুন।
আপনার VPN সূচক সবুজ হয়, রুট ফিরে আসে, আর আপনি খোলা রেখে যাওয়া SSH উইন্ডোটি কখনও প্রম্পট ফেরত দেয় না। পথ পুনরুদ্ধার করলে সেটি ব্যবহার করা TCP কথোপকথন পুনরুদ্ধার হয় না, তাই ওই উইন্ডোতে যা টাইপ করা হয়েছিল তা চলে গেছে। যদি আসল দুশ্চিন্তা হয় এডিটরের বাফার বা দীর্ঘ মাইগ্রেশন, তবে সমাধান হলো ওই কাজটি একটিমাত্র সংযোগের সঙ্গে বেঁধে রাখা বন্ধ করা। tmux আর একটি জব রানার সেই সমস্যার আলাদা আলাদা অর্ধেক সমাধান করে।
পুনঃসংযুক্ত VPN সকেট পুনরায় শুরু করে না
ঠিকানা বদলের পরে আবার শুরু করার কোনো ধারণা TCP-এর নেই। SSH সংযোগ দুই প্রান্ত দিয়েই চিহ্নিত হয়, আর টানেল আবার তৈরি হলে স্থানীয় ঠিকানা বদলে যেতে পারে এবং পুরোনো সকেট মৃত হয়ে যায়। সার্ভার শেষে তা লক্ষ্য করে, কিন্তু আপনার টার্মিনাল সঙ্গে সঙ্গে লক্ষ্য করে।
ক্লায়েন্ট কিপঅ্যালাইভ মৃত প্রতিপক্ষকে আগে শনাক্ত করে। এটি সেশনটি ফিরিয়ে আনে না, এবং আগে থেকেই চলছে এমন কোনো কমান্ড পুনরুদ্ধারও করতে পারে না। কিপঅ্যালাইভ একটি শনাক্তকারী, পুনরুদ্ধারের হাতিয়ার নয়। দূরবর্তী কমান্ডটি টিকে গেছে কি না, সে সম্পর্কে এটি কিছুই বলে না।
কাজটি দূরবর্তী হোস্টে রাখুন
সেশনটি ল্যাপটপে নয়, দূরবর্তী হোস্টে তৈরি করুন। যথারীতি সংযোগ করুন, সেখানে tmux চালু করুন, আর তার ভিতরে এডিটর বা মাইগ্রেশন চালান। ডিফল্ট প্রিফিক্স দিয়ে ডিটাচ করুন এবং SSH সংযোগ চলে গেলেও সেশন চলতে থাকে। স্থানীয়ভাবে tmux চালু করা আপনার শেলকে বন্ধ উইন্ডো থেকে বাঁচায়, মৃত টানেল থেকে আসা দূরবর্তী কমান্ডকে নয়।
ssh [email protected]
tmux new-session -s office-workVPN ফিরে এলে একই হোস্টে নতুন SSH সংযোগ খুলে নাম ধরে আবার অ্যাটাচ করুন। টেকসই বস্তু হলো সেশন, সংযোগ নয়। এমন নাম দিন যা এক সপ্তাহ পরেও আপনি চিনতে পারবেন।
tmux বনাম জব রানার
হোস্ট চালু থাকলে tmux একটি ইন্টারঅ্যাকটিভ প্রসেস জীবিত রাখে। একটি জব রানার বা সার্ভিস ম্যানেজার নন-ইন্টারঅ্যাকটিভ জব জীবিত রাখে, তার এক্সিট স্ট্যাটাস রেকর্ড করে, এবং SSH সেশন পুরোপুরি শেষ হলেও টিকে থাকে। প্রথমটি আপনার দেখা কাজের জন্য; দ্বিতীয়টি আপনার সময়সূচি করে পরে পরিদর্শন করা কাজের জন্য।
হোস্ট পুনরুদ্ধারের জন্য কনফিগার না থাকলে কোনোটিই রিবুটে টেকে না। tmux সেশন মেশিনের সঙ্গে মরে যায়, আর ক্ষণস্থায়ী জব ইউনিট হিসেবে নিবন্ধিত না থাকলে বুটের সঙ্গে মরে যায়। কাজটি কীসের পরে টিকতে হবে, তা দেখে বেছে নিন।
দুই পদ্ধতিরই পুনরায় সংযোগের পরে পড়ার মতো একটি লগ দরকার। সেটি ছাড়া আপনি জানেন প্রসেসটি আছে, কিন্তু কী করেছে তা জানেন না। লগের পথ সেশনের নামের পাশে লিখে রাখুন।
কী টিকতে হবে তা দিয়ে সিদ্ধান্ত নিন
কাজটি মাঝপথে থেমে গেলে যা সবচেয়ে খারাপ হতে পারে, তা দিয়ে সিদ্ধান্ত নিন। এডিটর সেশন অসংরক্ষিত বাফার হারায়, যা বিরক্তিকর কিন্তু পুনরুদ্ধারযোগ্য। যে মাইগ্রেশন তার অর্ধেক পরিবর্তন কমিট করে, সেটি তা নয়, আর এটাই রেকর্ড করা ফলাফলসহ একটি রানারের পক্ষে যায়। জবটি ইন্টারঅ্যাকটিভ ও দীর্ঘ হলে tmux আর একটি লিখিত লগ সাধারণত যথেষ্ট।
systemd-run --user --unit=migrate-customers --collect ./migrate.shযাই বেছে নিন, কিছু আবার চালানোর আগে রেকর্ড করা ফলাফলটি দেখে নিন। শেষ লাইনটি অনুপস্থিত থাকা বলে দেয় ল্যাপটপ কী দেখেছে, সার্ভার কী কমিট করেছে তা নয়। এই পার্থক্যই কাজটি শুরু থেকেই সংযোগের বাইরে রাখার কারণ, আর ডিটাচ ও রিঅ্যাটাচ মডেল তার সবচেয়ে ছোট রূপ।