LoginSignup
6
3

More than 3 years have passed since last update.

SSHが切れても実行中のプロセスを生かし続ける(nohup コマンド)

Posted at

SSHして外部からラズパイ内部でたたいたコマンドは実行中にSSHが切断されると終了する

SSHしているラズパイで,時間のかかるプロセスをSSHもと(PCのTeraTermのコンソールとか)から実行中にSSHが切れてしまうと,ラズパイがローカルだけで実行できるプログラムであっても実行していたプロセスが終了してしまう.
* 例:ラズパイのローカルのみで完結する,1時間回し続けるプログラムをSSHで実行していたが,ネットワークが不安定だったため,実行中にSSHが途絶えた.途絶えた時点でラズパイの中のプロセスも終了した

でも実験のデータは確実にとりたいのでネットワークが切れてもラズパイ内部ではプログラムを実行し続けてほしい

sshが何らかの理由で途絶えたとしてもラズパイ側で動いているプロセスを生きてほしい.

そんな時は nohup コマンドを使う.
* 記号なしリストnohupコマンドは実行したいコマンドの前につけることでその実行によって動くプロセスはSSHもとのアクションを受け付けなくなる(SSHが切れても終了しなくなる)
* 当然Ctrl+Cなどでの強制終了も効かなくなるため,killコマンドでプロセスを直接殺す必要がある
* 標準出力もキャンセルされてしまうため,実行中のプログラムの動作状況は確認しづらい
* 例えば,nohup lsと実行しても何も表示されない
* 実行中はそのコンソールには何も出力されないのでコマンドは末尾に&を付けてバックグラウンドで実行することを強くお勧めする
* 標準出力はnohup.outというファイルの中に書き込まれている
* プログラムの実行中はtail nohup.outなどを実行して出力状況を確認することができる

例:$ nohup python3 hogehoge.py &

プログラムを停止させるときはps -xコマンドでプロセスを確認

$ ps -x

  PID TTY      STAT   TIME COMMAND
  508 ?        Ss     0:00 /lib/systemd/systemd --user
  511 ?        S      0:00 (sd-pam)
  516 ?        Ssl    0:16 /usr/bin/lxsession -s LXDE-pi -e LXDE
  525 ?        Ss     0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
  566 ?        Ss     0:04 /usr/bin/ssh-agent x-session-manager
  573 ?        Ssl    0:00 /usr/lib/gvfs/gvfsd
  578 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
  588 ?        S      0:01 openbox --config-file /home/pi/.config/openbox/lxde-pi-rc.xml
  591 ?        Sl     0:00 lxpolkit
  599 ?        Sl    62:18 lxpanel --profile LXDE-pi
  601 ?        Sl     0:03 pcmanfm --desktop --profile LXDE-pi
  629 ?        Ss     0:00 /usr/bin/ssh-agent -s
  658 ?        S      0:07 /usr/bin/vncserverui service 15
  672 ?        S      0:01 /usr/bin/vncserverui -statusicon 7
  675 ?        Ssl    0:00 /usr/lib/menu-cache/menu-cached /run/user/1000/menu-cached-:0
  683 ?        Z      0:00 [sh] <defunct>
  691 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
  701 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
  705 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
  709 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-goa-volume-monitor
  713 ?        Ssl    0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
  751 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.4 /org/gtk/gvfs/exec_spaw/0
 1300 ?        S      0:14 sshd: pi@pts/0
 1303 pts/0    Ss     0:00 -bash
 1834 ?        S      0:00 sshd: pi@pts/2
 1837 pts/2    Ss     0:00 -bash
 1952 pts/0    R+     0:30 python3 hogehoge.py  //該当のプロセス
 1953 pts/2    R+     0:00 ps -x
17807 ?        Sl     0:24 lxterminal
17808 ?        S      0:00 gnome-pty-helper
17809 pts/1    Ss+    0:00 bash
24536 ?        S      0:02 sshd: pi@notty
24538 ?        Ss     0:00 /usr/lib/openssh/sftp-server

該当のプロセスのプロセスID(PID)を指定してプロセスを削除する

kill 1952
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3