電気通信工学研究会公式ブログ

関西大学の公認サークル、電気通信工学研究会のブログです。

ssh接続を切ってもpythonファイルを実行し続ける

入退室システムの管理を引き継いだパラボイです。 pythonファイルをssh接続を切っても動かせるように改良したので、そのことについて書いていきたいと思います。

以前の入退室システム

以前の入退室システムは扉付近に常設しているラズパイをsshで接続してpythonファイルを動かしていました。

問題点

pythonファイルを起動して動かすのはいいのですが、ssh接続をログアウトしてしまうと実行しているpythonファイルも同時に切れるようになっていました。

改良過程

色々なサイトの記事を読みつつ改良していきました。 (見たサイトが多すぎるので割愛させていただきます) うまく行った理由、うまく行かなかった理由はラズパイやssh接続について詳しくないのでよくわからなかったです。 実行したいファイル名をmain.pyとしています。

1. nohupを使う
$ nohup python main.py &

そもそも、コマンド入力画面にもどる方法がわからずに断念。 main.pyを実行した状態から抜け出せず他の操作ができなくなっていた。

2.disownを使う
$ python main.py 
Ctrl+zを入力してプロセスを停止させる
$bg %1 //1の部分はジョブ番号
$disown %1 //1の部分はジョブ番号

これをするとmain.pyをバックグラウンドで実行しつつターミナルでは他の操作ができるようになりました。しかし、ssh接続を切ってしまうとmain.pyも落ちてしまい、結局ssh接続をし続けないといけない状態でした。

3.screenを使う
$sudo apt-get install screen

screenの機能がインストールされていない場合は上記のコマンドを打ってインストールして下さい。

$screen //このコマンドの後に文字がいっぱい出てくるので指示に従い進める
$python main.py
Ctrl+zを入力してプロセスを停止させる
$bg %1 //1の部分はジョブ番号
$disown %1 //1の部分はジョブ番号
Ctrl+a を押してからdを押す //ssh接続をした状態に戻ってくる

これをするとssh接続を切ってもずっとmain.pyが動き続けてくれるようになりました。 screenを使って仮想端末を作ってるみたいです。(よくわからないです)

まとめ

カードリーダーを使うたびにssh接続をする必要がなくなったので、いろんな人が使いやすくなったのかなと思います。次は、7セグなどで入室人数を視覚的に見れるように改良できたらなと思っています。