উত্তর:
না, হত্যার সঠিক উপায় autosshহ'ল প্রক্রিয়াটি হ'ল autosshঅন্য কিছু নয়।
কারণ
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
এটি autosshকেবল একটি শেল স্ক্রিপ্ট, কোনও পরিষেবা নয় । এটি একেবারে শেষ লাইনে একটি নতুন প্রোগ্রাম শুরু করে,
exec /usr/lib/autossh/autossh "$@"
আবার কোন পরিষেবা নয়। যেমন exec(আপনি এটি বাশ হ্যাকারদের উইকিতে ডাবল-চেক করতে পারেন ), এটি একটি শেল-বিল্টিন কমান্ড যা /usr/lib/autossh/autossh "$@"কোনও নতুন প্রক্রিয়া শুরু না করেই বর্তমান শেলটি নিম্নলিখিত কমান্ডের সাথে ( এই ক্ষেত্রে) প্রতিস্থাপন করে । সুতরাং, থামানোর একমাত্র উপায় autosshহ'ল কলিং স্ক্রিপ্টটিকে হত্যা করা
pkill -3 autossh
( -3 পতাকা ব্যবহারের গুরুত্ব নির্দেশ করার জন্য ডিভিলজয়েনকে ধন্যবাদ , নীচে দেখুন) ঘটনাক্রমে, সংযোগটি হত্যা করা কার্যকর হবে না, কারণ কলিং কমান্ড ( যেমন উপরের একটিটি) পুরানোটি বাদ পড়েছে তা বুঝতে পারার সাথে সাথেই নতুন সংযোগ শুরু হবে। ssh
SIGTERMএটি ডিফল্ট এবং এটি একটি 15। SIGQUITহ'ল 3, superuser.com/questions/352147/ কি--15 does- kill-3- mean এবং en.wikedia.org/wiki/Kill_(command) - এছাড়াও, এফডাব্লুআইডাব্লু, আমি কেবল এটি পরীক্ষা করেছি এবং এটি বন্ধ করে দিচ্ছি না, সুতরাং SIGTERMব্যবহার করা যাবে না।
pkillকোনও সিগন্যাল (= the default) ব্যবহার করেও শেষ হবে না autossh।
এর সাথে অটো ssh চালান:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
এটি দিয়ে হত্যা:
kill pid
BTW
pkill -9 autossh একটি ভুল
-9নিশ্চিত করে তোলে যে প্রক্রিয়াটি সুদৃ .়ভাবে প্রস্থান করছে না, সুতরাং sshপ্রক্রিয়াটি autosshনিহত হওয়ার পরে প্রক্রিয়াটি এখনও রয়েছে
ছাড়াও -9এখনও খারাপ, আপনার যদি একাধিক টানেল চলমান থাকে তবে pkillসেগুলি সমস্তই মেরে ফেলবে
সঠিক উপায় হ'ল AUTOSSH_PIDFILEenv var সেট করতে হয় তবে killকেবল সেই পিড
আমি জানি যে এটির উত্তর দেওয়া হয়েছে, তবে উপরের মন্তব্যের বিপরীতে, pkill -3 autosshএসএসডিডি চাইল্ড প্রক্রিয়াগুলি আমার জন্য হত্যা করে না।
আমি আমার .bashrcফাইলে এই ফাংশনটি ব্যবহার করি ।
মূলত, এটি অটোশকে --killযুক্তি যুক্ত করার মতো।
if [ "$1" = "--kill" ]; then
ps aux |
grep -P "(/usr/bin/ssh|/usr/lib/autossh/autossh)\s.*$2" |
awk '{print $2}' |
xargs -r kill
else
$(which autossh) "$@"
echo "" # prevents line wrapping when you kill the ssh process
fi
আপনি চালাতে which sshএবং which autosshআপনার সিস্টেমে পাথ পরীক্ষা করতে পারেন ।
যতক্ষণ না প্রথম যুক্তি না হয় ততক্ষণ --killএটি কেবল আরোগুলি অটোশকে পাশ করে।
এই স্ক্রিপ্টটি অটোশ & এসএসএস দৃষ্টান্তগুলিকে হত্যা করে। আপনি যদি পোর্ট ফরওয়ার্ডিং ব্যবহার করছেন তবে এটি গুরুত্বপূর্ণ কারণ কেবলমাত্র অটোশ উদাহরণটি মারা গেলে টানেলটি মারা যায় না, এটি / যদি শেষ পর্যন্ত সংযোগ বিচ্ছিন্ন হয় তবে এটি পুনরায় সংযোগ স্থাপন থেকে বিরত রাখে।
আপনি কেবলমাত্র নির্দিষ্ট টানেলগুলিকে মারতে অনুসন্ধান শব্দ (হোস্টের নাম) নির্দিষ্ট করতে পারেন।
autossh --kill dbserver1dbserver1 এর সাথে সংযোগগুলি কেবল
autossh --kill dbserverdbserver1, dbserver2, ইত্যাদিকে
autossh --kill dbserverহত্যা করবে সমস্ত অটোশ সংযোগকে হত্যা করবে
স্পষ্ট করে বলতে, এটি কেবলমাত্র এসএসএইচ সেশনগুলিকে অটোশ দ্বারা চালিত করা উচিত।
আপনি ps aux | grep sshঅটোশ এবং এসএসএস উভয় সেশন চলাকালীন দৌড়ালে আপনি দেখতে পাবেন যে অটোশ দ্বারা শুরু করাগুলি সম্পূর্ণ পথ (/ usr / bin / ssh এবং / usr / lib / autossh / autossh) ব্যবহার করে।
এই স্ক্রিপ্টটি কেবল স্পিকারিফসি পথ দিয়ে শুরু হওয়া প্রক্রিয়ার সাথে ফলাফলগুলির সাথে মেলে। আমি এটি করেছি কারণ আমি (এবং আমি বেশিরভাগ লোককে ধরে নিই) সাধারণত টাইপ করি sshএবং পুরো পাথটি না, যা এটি আমার সাধারণ এসএসস সেশনগুলি হত্যার হাত থেকে রক্ষা করে।
আশা করি এটি অন্যকে সহায়তা করবে।
$(which autossh)পরিবর্তে কোন বিশেষ কারণ autossh?