উত্তর:
না, হত্যার সঠিক উপায় 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_PIDFILE
env 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 dbserver1
dbserver1 এর সাথে সংযোগগুলি কেবল
autossh --kill dbserver
dbserver1, dbserver2, ইত্যাদিকে
autossh --kill dbserver
হত্যা করবে সমস্ত অটোশ সংযোগকে হত্যা করবে
স্পষ্ট করে বলতে, এটি কেবলমাত্র এসএসএইচ সেশনগুলিকে অটোশ দ্বারা চালিত করা উচিত।
আপনি ps aux | grep ssh
অটোশ এবং এসএসএস উভয় সেশন চলাকালীন দৌড়ালে আপনি দেখতে পাবেন যে অটোশ দ্বারা শুরু করাগুলি সম্পূর্ণ পথ (/ usr / bin / ssh এবং / usr / lib / autossh / autossh) ব্যবহার করে।
এই স্ক্রিপ্টটি কেবল স্পিকারিফসি পথ দিয়ে শুরু হওয়া প্রক্রিয়ার সাথে ফলাফলগুলির সাথে মেলে। আমি এটি করেছি কারণ আমি (এবং আমি বেশিরভাগ লোককে ধরে নিই) সাধারণত টাইপ করি ssh
এবং পুরো পাথটি না, যা এটি আমার সাধারণ এসএসস সেশনগুলি হত্যার হাত থেকে রক্ষা করে।
আশা করি এটি অন্যকে সহায়তা করবে।
$(which autossh)
পরিবর্তে কোন বিশেষ কারণ autossh
?