Yanıtlar:
Hayır, öldürmenin doğru yolu autosshsadece süreci öldürmektir, autosshbaşka bir şey değildir.
Sebebi
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
bu autosshsadece bir kabuk betiğidir, bir hizmet değil . Son satırında yeni bir program başlatır,
exec /usr/lib/autossh/autossh "$@"
yine bir hizmet değil. Gelince exec( Bash korsanlarının wiki'sinde iki kez kontrol edebilirsiniz ), /usr/lib/autossh/autossh "$@"yeni bir işlem başlatmadan mevcut kabuğu aşağıdaki komutla ( bu durumda) değiştiren bir kabuk yerleşik komutudur . Yani, durmanın tek yolu autossh, örneğin, çağrı yapan komut dosyasını öldürmektir.
pkill -3 autossh
( -3 bayrağını kullanmanın önemine dikkat çektiği için dviljoen sayesinde , aşağıya bakın). Bu arada, bağlantıyı öldürmek işe yaramaz, çünkü çağrı komutu ( yani , yukarıdaki), eskisinin bırakıldığını fark ettiği anda yeni bir bağlantı başlatır. ssh
SIGTERMvarsayılan değerdir ve bu değerdir 15. SIGQUITolduğunu 3görmek superuser.com/questions/352147/what-does-kill-3-mean ve en.wikipedia.org/wiki/Kill_(command) - Ayrıca, FWIW, ben sadece kontrol edilmiş ve -15bunu kapatılmıyor, bu yüzden SIGTERMkullanılamaz.
pkillbir sinyal (= default) de sona etmez autossh.
auto ssh uygulamasını şununla çalıştır:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
öldürmek:
kill pid
BTW
pkill -9 autossh yanlış
-9sürecin zarifçe çıkmamasını sağlar, bu yüzden sshsüreç autosshöldürüldüğünde süreç hala oradadır
olmadan -9hala kötü, birden fazla tünel varsa, pkillhepsini öldürecek
AUTOSSH_PIDFILEenv var değerini killsadece bu pid'den sonra ayarlamaktır
Bunun cevaplandığını biliyorum, ancak yukarıdaki yorumların aksine pkill -3 autossh, sshd çocuk süreçlerini benim için KULLANMAYIN.
Bu işlevi .bashrcdosyamda kullanıyorum.
Temel olarak, autossh'a bir --killargüman eklemek gibi .
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
Sisteminizdeki yolları çalıştırabilir which sshve which autosshkontrol edebilirsiniz.
İlk argüman olmadığı sürece, argümanları --killautossh'a iletir.
Bu komut dosyası autossh & ssh örneklerini öldürür. Bağlantı noktası iletme kullanıyorsanız bu önemlidir, çünkü YALNIZCA autossh örneğini öldürmek tüneli öldürmez, sadece sonunda bağlantıyı kesip kesmediği / ne zaman yeniden bağlanmasını engeller.
Ayrıca yalnızca belirli tünelleri öldürmek için bir arama terimi (ana bilgisayar adı) belirleyebilirsiniz.
autossh --kill dbserver1sadece dbserver1 bağlantılarını
autossh --kill dbserveröldürür dbserver1, dbserver2, vb. TÜM otozsh bağlantılarını
autossh --kill dbserveröldürür
Açıklığa kavuşturmak için, yalnızca autossh tarafından başlatılan SSH oturumlarını öldürmelidir.
Eğer çalıştırırsanız ps aux | grep sshsize autossh ve SSH oturumları hem çalışan varken, hangilerinin autossh kullanımı ile tam yolunu (/ usr / bin / ssh ve / usr / lib / autossh / autossh) başladığını göreceksiniz.
Bu komut dosyası yalnızca sonuçları speicifc yolu ile başlatılan işlemlerle eşleştirir. Bunu yaptım, çünkü ben (ve çoğu insanın) genellikle sshtam yolu değil, tam yolu yazıyorum, bu da normal ssh oturumlarımı öldürmesini engelliyor.
Umarım bu başkalarına yardım eder.
$(which autossh)sadece yerine özel bir neden autossh?