2009-03-03 30 views
2

Web GUIを介して対話型シェルスクリプトをリモートで実行する必要があります。これは、スクリプトの標準出力に印刷されたものをGUIで利用できるようにしなければならず、GUIからユーザー入力を取得してスクリプトの標準入力に書き込む必要があることを意味します。Web GUIからリモートでシェルスクリプトを実行する

私の質問は です。(a)これは良いアイデアですか? (b)以前誰かがこの種の問題を解決しましたか?はいの場合、それについて「最も良い」方法は何ですか?

EDIT#1:実行するスクリプトは、Webサーバーと同じホストにありません。

EDIT#2:あなたの応答のための

ありがとう!ブラウザ側のソリューションは私の目的に合っていないのではないかと恐れています。なぜなら、ユーザは1つ以上のスクリプトを開始し、ブラウザを閉じたり、スクリプトの出力をチェックしたり、入力したりすることができます。

私が考え出したのは、スクリプトの出力を別のファイルに保存することです。ユーザーがブラウザを起動すると、ファイルから読み込みを開始し、スクリプトが終了するまで(Ajax経由で)ポーリングを続けます。実行中。

答えて

1

CGIのような音

0

おそらくいい考えではありません。インタラクティブシェルスクリプトは、通常Webページを通して実行されません...

もちろん可能です。

代わりに、達成したいことを考え、標準のWebコンポーネントで構成された素敵なUIを作成します。あなたは「ウィザード」のように機能するものを作ることができますか?

2

これが機能するには、何らかのバックグラウンドプロセスが必要なようです。このようなスクリプトが実行されている間、ブラウザはページをロードしていると考えているので、1つのスクリプトから実行することはできません。これが予想以上に時間がかかると、それは中止され、そのことが示されます。 "サーバの応答に時間がかかりすぎました"

実際に別のプロセスを生成/フォークし、クライアント側からサーバに定期的にリクエストする必要があります。これにより、サーバ側のスクリプトがプロセスと交換に接続されますそれに伴うメッセージ。

たとえば、phptermを参照してください。

1

おそらくあなたはそれを考慮しない理由があるかもしれませんが、ウェブベースのシェルはどうですか?例えばAjaxTerm(http://antony.lesuisse.org/software/ajaxterm/

私は、あなたがログインできるユーザーアカウントを設定してから、通常のコントロールを適用して、ユーザーが実行できるスクリプト(またはchroot?)を制限することができます。

シェルスクリプトを実行する場合は、シェルを使用しないでください。 :)

0

Expectを使用して、nohupまたはバックグラウンドジョブとしてプロセスを開始し、ログアウトしてから定期的にログファイルのチェックに戻ってログオンするか、入力を提供することができます。

関連する問題