GNU screenでセッション情報が保存してあるソケットディレクトリは 通常/tmpやそういったところにありますが、 WindowsやMacで使ってる時にふと再起動した時にも 消えないで残っててくれないかな、と思ってやってみた、と。
SCREENDIR
/tmpディレクトリとかは再起動時に消されてしまうので 残ってくれません。
このディレクトリは、環境変数で
SCREENDIR
という値で変えられます。
このディレクトリはパーミッションが700
(自分だけが読み書きできる)
様になっていないといけないようなので、
.bashrcに
1 2 3 4 5 6 |
|
こんな感じで書いてみました。
追記: 2014/05/14
Cyginのhotname.exe
が-s
をサポートしてなかったので
cut
を使う様に更新。
追記ここまで
ディレクトリ名にホスト名を付けているのは、 複数の端末でホームディレクトリを共有してる場合などに 競合を避けるためです 1 。
これできちんと$HOME/.screen_$(hostname|cut -d. -f1)
へ入ってることを確認
2。
$ echo $SCREENDIR
/Users/user/.screen_myhost
$ ls $SCREENDIR
00000.ttys000.myhost
Macで再起動してみる
で、適当なセッションを作ってデタッチしてMac自体を再起動してみました。
$ screen -ls
No Sockets found in /Users/user/.screen_myhost
…と。ディレクトリを直接覗いてみると、確かに上のものは消えて何もありません。
どのタイミングで誰が消したかわからにですが、消えていました。
ただ、よく考えてみると、screenのセッション自体の情報を残しておいても、 そこで動いてるプロセスは皆死ぬわけで、 仮にセッション情報が残っていても立ち上がるわけ無いな、と、当たり前ですが。
ということで馬鹿なことをしましたが、SCREENDIR
について少し学べたな、と。
誰がどのタイミングで設定ファイルを消してるのかが少し気になりますが、 結局良くわかりませんでした。
SCREENDIR
が特に有用なとき
例えば、/tmp
を定期的に消されてしまうような環境では
下手すると勝手にセッション情報が消されてしまうので
自分の管理できるところにおいておくと安全かも。
ので、上みたいな設定を.bashrcに書いておいても 損はしないだろうと (これだけの作業でそこまで.bashrcの読み込みが遅くなることも無いでしょうし)。