こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C#で仮想環境上(Linux)のスクリプト実行

Windowsアプリケーションから、VirtualBox(仮想化ソフト)上の
Linuxのシェルスクリプトが実行されるようにしたいと考えているのですが、
どのような手法があるか、ご教授頂けますでしょうか。

イメージとしては、
Visual Studio上で実行ボタンをクリックすると、
Windows上で実行されるのと同様に、
Windowsアプリケーション上のボタンをクリックすると、
Linux上のシェルスクリプトが実行されるようにしたいと考えております。

仮想環境は起動していることが前提です。

また、開発環境は Visual C# (2010)です。

よろしくお願いいたします。

投稿日時 - 2012-04-03 13:22:27

QNo.7399792

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

UDPかTCPで通信してはいかがでしょう?
Linux上で動作する簡単なデーモンをいっこ作って、(例えばUDP Port12345でListenするもの)
動作命令を受信したらシェルスクリプトを実行。
C言語であればsystem("/path/to/hoge.sh");とかですね。

1.Linuxでスクリプト起動指示待受デーモンを実行
2.C#からUDP Port12345で仮想PCのIPアドレスにスクリプト実行要求送出
3.Linuxでスクリプト実行要求受信
4.system()関数でシェルスクリプト実行

もちろんTCPでもいいしPort番号も別のものでOKです。


ほかには、LinuxでApache+PHPとか動かして、http://[virtualbox-ip]/start.phpにアクセスすると
シェルスクリプトが動作するようにしておくとか。
この場合はC#からHTTPアクセスさせればOKですね。
スクリプト側では
<?
system('/path/to/hoge.sh');
?>
といった感じですね。

パケット使う以外の方法は思いつきいませんでした。
気に入らなかったらすんません。

投稿日時 - 2012-04-04 20:01:53

お礼

早速のご回答ありがとうございます!

自分なりに調査した結果、
下記のようにSharpSSHというライブラリを利用してLinuxコマンドを送信できることがわかりました。

/////////////////////
SshExec exec = new SshExec("192.168.0.1", "user", "pass");
exec.Connect();
string stdOut = null;
string stdError = null;
exec.RunCommand("test.sh", ref stdOut, ref stdError);

Console.WriteLine(stdOut);
exec.Close();
/////////////////////


しかし、TeraTermなどのターミナルからスクリプトを実行した際と、
SharpSSHを用いてスクリプトを実行した際において
設定されている環境変数が異なる(envコマンドで比較するとSharpSSH側が少ない)ようで、
正常に実行されませんでした。

事前にすべての環境変数をexportコマンドで設定することで回避はできましたが、
あまりいい方法では無い気がしますので
ご教授頂いた方法も検討させて頂きたいと思います。

投稿日時 - 2012-04-05 10:32:38

あなたにオススメの質問