rshを使ってサーバのシェルスクリプトをバックグラウンドで起動する

たとえばWindows端末からサーバのコマンドを動かしたいと思うことがある。そんなときrshが使えると、比較的簡単に希望を叶えることができる。

rsh hostname -l username command

往々にしてサーバで実行するコマンドは終わるまでに時間がかかることがある。rshの仕様ではサーバで起動したコマンドの実行が完了するまでクライアントに制御が戻ってこない。そんなときサーバのコマンドをバックグラウンドで起動すれば、すぐに制御が返ってくるのではないかと

rsh hostname -l username "command &"

のような形でrshを実行してみても、やっぱりrshはサーバのコマンドが完了するまでじっと待ってしまう。なぜこうなってしまうのか正確な理由は説明できないが(^^ゞ、なんでもrshはクライアントとサーバのあいだで標準入出力をコピーするのだけど、サーバのコマンドをバックグラウンドで起動すると標準入出力がクローズされたことをクライアントのrshから判断できないから、みたいなことらしい。なので明示的にコピーすべき標準入出力がないことを示してやれば、期待する動作が実現する。

rsh hostname -l username -n "command > /dev/null 2>&1 < /dev/null &"

このように標準入力・標準出力・標準エラー出力を/dev/nullにリダイレクトすることで、サーバのコマンドがバックグランドで起動すると、すぐにクライアントに制御が戻ってくるようになる。rshの-nはクライアントの標準入力を/dev/null(WindowsではNULL)にリダイレクトするオプションである。しかし、これもバッドノウハウだよなぁ。