Linux(Unix)のscreenの外からコマンドを実行する方法

takahashi 著者:takahashi

Linux(Unix)のscreenの外からコマンドを実行する方法

LinuxやUnixでSSHにつなぎながら作業する際、時間のかかる処理を行わせたりでしばらく放置しておく機会と言うのはしばしばあります。

そんなときに、途中でインターネット接続が切れてしまうと最悪です。また、トラブル以外でもは会社の業務終了時間になって退社する時するなどでマシンの電源を落とさないといけない場面があったりします。

そんなときにscreenコマンドは便利です。
サーバー側に仮装のターミナルを作成し、そこで様々な処理を実行することが出来ます。
途中でSSHが切断されてしまっても、screenはサーバーの中で動作しているので、処理も続行されます。途中で処理させながらscreenターミナルから抜けることも、再度入ることも可能です。

また、スクリプトを簡易的にデーモンっぽく動作させる使い方もできます。

このscreenコマンドですが、実は外部からコマンドや文字列を与えることができるのはご存知でしょうか。

例えば、s1という名前でスクリーンを作成し、

$ screen -S s1

s1スクリーン内でpythonのプロンプトを起動しておきます。

$ python

Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

このs1スクリーンに、外からs1の標準入力に対して文字列を入力したい場合、
まず、ctrl+a d でスクリーンをデタッチした後で、

$ screen -S s1 -X stuff 'print "Hello world!"
'`echo -ne '\015'`

とした後、再度screen -r s1 でアタッチすると

>>> print "Hello world!"
Hello world!
>>> 

と表示されているはずです!

これは例えば、screenで実行中のプログラムに文字列を渡したい時や、特定のscreenでのみ定期的にプログラムを実行したいときに有効です。

予めシェルスクリプトにしておけば、cronで回すことも出来ます。
便利なので、ぜひ一度試してみてはいかがでしょうか?

参考サイト:
Minecraftサーバをscreenとcronでプラグインを使わずに自動再起動する – 純規の暇人趣味ブログ

別ターミナルで動いているscreenに外部からコマンド実行 – 戯術者の日記

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。

1件のコメント

screenとshutdown | 株式会社シーポイントラボ | 浜松のシステム開発会社投稿日:5:58 pm - 4月 16, 2018

[…] コマンドとshutdownコマンドについて書くことにしました。screenについてはこちらの記事こちらの記事で詳しく話されています。 screen  screenは端的に言えば別画面を作るコマンドです。タ […]

コメントは停止中です。