備忘録(鍵認証まわりもいつか書く)
まとめ
一例:
scp /dir_file Hostname:/dir
↓
ssh HOSTNAME
↓
nohup python3 -u script.py \
--input_val 1 \
--outdir out/data_out \
> out/run.log 2>&1 &
↓
ps -u $USER
↓
ssh caffeinate -i -w 12345
↓
exit
↓
tail -f out/run.log
ログイン
ssh (username@Hostname)で繋げる。
ssh username@Hostname_such_as_HostIP
同じネットワークに入ってたり(というか接続される側が許容してるネットワークに入ってたり)しないとダメっぽい。学科のサーバーに接続するためにはuTokyo VPN (Ciscoから行けるよ!<自分へ)に入っている必要があり、学科所有のmac mini の自分のアカウントにリモート接続するには一旦学科のサーバーに入ってからmac miniにリモート接続する必要がある。めんどくさい!(たぶん、macminiがログインするときに学科のサーバーに接続されてるかどうかを確認するようになってるので、こんなことになっている。)
また~/.ssh/ssh.configをあらかじめ編集しておけば毎回usernameとHostnameを打たなくていい。(あと鍵認証周りもやってくれる。)
Host keisanki_gakka
HostName keisanki_gakka.u-tokyo.ac.jp
User myuser_name
IdentityFile ~/.ssh/id_rsa
確認はls ~/.ssh/config、編集はnano ~/.ssh/configで。
2026/5月現在、sshコマンドは
ssh dover > 学科サーバー
ssh macmini > 学科macminiの自分のアカウントにリモートログイン
という風になっている。ただし、ssh macminiは一回ssh doverを経由するようにしている。(configに書いている)
ファイルの転送
手元のコンピュータのterminalで、
scp /dir/file Hostname:/dir
でおくる。/dir/fileは送りたいファイル、HostnameはDoverやらmacminiやら。ファイルを置きたい場所は、sshでログインした時のディレクトリからの相対パス。
ジョブの実行(nohup)
普通にジョブを実行すると、sshを切った時にjobも止まってしまうので、nohupを使う。
nohup python3 ./python.py
みたいな。これをすると、ログアウトしてターミナルを閉じてもジョブを走らせ続けてくれる。jobは基本的にbashの管理下にあるので、jobsコマンドで実行中のjobを表示できるが、ターミナルを切るとbashも終了するのでjobは誰の管理下にもなくなる。
bash->こいつがssh切ると閉じる。
|-jobs
|-[1]
|-[2]
.
.
.
なのでjobsではジョブを管理できないので、psでCPUが実行中のプロセスを表示させる。
ps -u $USER
↑User管理下のプロセスを表示させる。
↓出力例
UID PID TTY TIME CMD
52428 24934 ?? 71:57.31 python3 -u script.py
これはPIDでkillできる。
kill 24938
ジョブの出力(標準出力表示)
nohupだと、標準出力をしてくれない。そこで、コマンドを次のようにして、出力をlogファイルに書き込ませる。
nohup python3 -u script.py \
--input_val 1 \
--outdir out/data_out \
> out/run.log 2>&1 &
こうすると、標準出力(現在の実行割合とかを表示させたり)がrun.logに保存されるので、
tail -f out/run.log
で出力を表示できる。(tailはファイルの更新を追いかける命令的なものだと思っておけば良さそう。)(^Cで表示はkillできる。)
caffeinate
jobのPIDが12345なら、
ssh caffeinate -i -w 12345
で、12345が走ってる間のスリープを抑止する。