にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

sshでログインした先で、ログアウトしてもコマンドの実行が継続されるようにする: screenコマンド

sshでログインしている先のLinuxで、終了まで長い時間がかかるDNNの学習などの処理を実行し、後はログアウトして終了を待つ、ということがしたかったので、どうすればいいのか調べたメモ。


バックグラウンド実行しただけではログアウトすると終了してしまう。
nohupを使用しても、ログアウト時に終了されてしまう。

screenコマンド

どうやらscreenコマンドを使用するといいらしい。
screenは仮想的な端末を作成することができるコマンドで、作成した仮想端末は必要に応じて付け替えて使え、さらにログアウトしても保持されるらしい。
詳しい使い方は以下のサイトを参照。
qiita.com

asayamakk.hatenablog.com

suでユーザを切り替えた場合

ただし、screenコマンドはsuでユーザを切り替えている場合、ターミナルが開けないとエラーを吐く。
ログインしたユーザに対し擬似ターミナルが作成されているため、ユーザを切り替えた先ではターミナルが無く、scriptコマンドを実行して擬似ターミナルを無理やり作成しないといけないとのこと。


あるいは、suによってユーザを切り替えるのではなく、初めからそのユーザでログインすればこの問題は起こらない。

sshで接続した先でmatplotlibなどがエラーを吐く

qiita.com

ssh接続した先でpythonからmatplotlibを扱うと$DISPLAY環境変数がないよって怒られる

_tkinter.TclError: no display name and no $DISPLAY environment variable

なので、

env DISPLAY=:0 python hoge.py

みたいにして実行するといいらしい。