子育てしながらエンジニアしたい

現在 2 歳女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

Raspberry pi で SSH ログアウト後もプロセスを残したい

作業の途中で SSH ログアウトしたい...

前回の記事で、Raspberry piRadius サーバーとして活用する方法をご紹介しました。

edosha.hatenablog.jp

こんなふうに大量の作業をするときは、一時中断するために SSH からログアウトすることもあります。
コンフィグファイルなど、ファイルに書き込むような作業はログアウトしても問題ありませんが、たとえば Python スクリプトを走らせっぱなしにしてログアウトすると、Python プロセスが終了してしまいます。

それを避けるために 2 つの方法を試しました。

SSH ログアウト後もプロセスを残す方法

1. screen コマンドを使う

Linux では仮想端末を作成する screen というコマンドがあります。
SSH をログアウトしても仮想端末を残す」ことで、仮想端末上にプロセスを残すことができます。

askubuntu によれば、tmux というコマンドのほうが良いぜ!ということらしいのですが、Raspberry pi 上に入れるのに一苦労しそうだったので、まぁ良いかということで screen にしました。

askubuntu.com

インストール

apt-get でインストールするだけです。

$ sudo apt-get install screen
プロセスの残し方

基本的には以下の流れがすべてです。

1. screen を起動する

$ screen

2. 所望のプロセスを起動する
3. Ctrl + A、Ctrl + D をタイプする

これで、所望のプロセスが起動したまま、仮想端末から抜ける (デタッチ) ことができます。
抜けた後で SSH ログアウトしても、仮想端末が残っているのでプロセスも残る、というわけです。

ちなみに、またこの仮想端末に入るときは

$ screen -r

とすれば OK です。

その他の screen コマンド

いくつか便利なコマンドを紹介します。

  • screen を起動するときに出るメッセージを消す
    • screen -q
  • 仮想端末のリストを出す
    • screen -list
  • 該当する仮想端末にアタッチする
    • screen -r [プロセス番号]
  • 該当する仮想端末を削除する
    • screen -X -S [プロセス番号] quit
  • コマンドのヘルプを見る
    • screen -h

その他、以下のサイトに詳しく紹介してくれています。

qiita.com


2. シリアルを使う

Raspberry pi はシリアル接続でコマンドを投げることもできます。
SSH ログアウト後」という趣旨とはちょっと違いますが、そもそも SSH/ネットワークを使わなければプロセスはそのまま残る、ということで、この方法も紹介しておきます。

なお PC とシリアル接続をするには、USB シリアル変換とジャンパーケーブルが必要です。
自分は以下の製品を使っています。

ジャンパワイヤ(オス?メス) 10本セット

ジャンパワイヤ(オス?メス) 10本セット

Raspberry pi のシリアルを有効にする

まず最初に、Raspberry pi のシリアルを使えるようにしてあげる必要があります。
なお Raspberry pi のモデルや OS バージョンによって、微妙にやり方が異なるようです。
自分が使っているのは Raspberry pi 3 model B で、OS は Raspbian Jessie 8.0 (2017/07/05) です。

ここは SSH にログインしてやりましょう。

$ sudo raspi-config

5. Interfacing Options を選択します。
P6 Serial を選択し、Yes にします。
そのあとリブートすれば、シリアルが有効になります。

Raspberry pi との接続

以下のように Raspberry pi と USB シリアル変換を接続します。
Raspberry pi 3 model B でやっていますが、他のモデルだと配置が違うと思うのでご注意ください。

f:id:edosha:20171110141446j:plain:w400

Raspberry pi --- USB Serial
6 (GND)       -  GND
8 (UART TX)   -  RX
10 (UART RX)  -  TX

TX と RX を接続することに注意が必要です。
TX 同士、RX 同士をつないでも送受信できません。
また、スイッチサイエンスの USB シリアル変換モジュールは 5V/3.3V の両対応になっており、ジャンパで切り替えられます。
Raspberry pi は 3.3V なので、あらかじめ 3.3V 側にジャンパしておきましょう。

最後に PC と USB シリアル変換モジュールを USB でつなげば完了です。
ドライバは勝手にインストールされる、と思います。

シリアル接続の良いところは、余計なコマンドを叩かなくても良いことですね。
忘れっぽい自分に合ってます。
デメリットはもちろん外部モジュールが必要なことですが...