screenがdetachできないときはsshdプロセスを殺す
生きているはずのscreenセッションがdetachできない問題.回線が落ちたのにscreenが自動でdetachされないというのは時々あるが,今回の場合はいくらscreen -dしてもdetachされない.非常に厄介だ.
現状確認
screenの状態を確認してscreen -dでdetachするも,効果がない.
$ screen -ls There is a screen on: 1028.pts-19.hoge (Attached) 1 Socket in /var/run/uscreens/yag_ays $ screen -d [1028.pts-19.hoge detached.] $ screen -ls There is a screen on: 1028.pts-19.hoge (Attached) 1 Socket in /var/run/uscreens/yag_ays
解決
screenを開いているsshdが生きていることが原因のようなので,一度killで落としてから再度screen -d; screen -Rすることで問題を解消できる.
$ ps x | grep sshd 22147 pts/25 S+ 0:00 grep sshd 29364 ? S 0:00 sshd: yag_ays@pts/17 30928 ? S 0:00 sshd: yag_ays@pts/25 $ kill -9 29364 $ screen -d $ screen -R
これでscreenセッションを復旧することができる.間違っても新しい方のsshdを消してしまわない様に....
これは恐らく,sshで多段ログインしている環境で回線が落ちると,何らかの原因で多段先にログインしているサーバにSIGHUPが送られないからだと思われる.これに関しては対策ができなさそうなので,screenをきっちりdetachしてから落ちるなどして日頃注意しておくしかないか....
注意
今回示したscreenがdetachできないというケースは非常特殊な環境下で頻発しているものであり,普通に設定しているサーバなら滅多に起こらない現象だと思う.