2

我的项目需要通过 Web GUI 远程执行交互式 shell 脚本。这意味着打印到脚本标准输出的内容必须在 GUI 上可用,并且用户输入必须从 GUI 获取并写入脚本的标准输入。

我的问题是(a)这是一个好主意(暂时搁置它是一个要求的事实)?(b) 以前有人解决过这类问题吗?如果是,那么“最好”的方法是什么?

编辑#1:要执行的脚本与 Web 服务器不在同一主机上。

编辑#2:

感谢您的回复!我担心浏览器端解决方案不符合我的目的,因为用户可以启动一个或多个脚本,可以关闭浏览器,过一段时间再回来检查脚本的输出并提供输入。

我提出的设计涉及将脚本的输出存储到不同的文件中,当用户启动浏览器时,它开始从文件中读取并不断轮询(通过 Ajax),直到脚本完成执行。

4

5 回答 5

2

似乎您需要某种后台进程才能使其正常工作。您不能从单个脚本执行此操作,因为当这样的脚本正在运行时 - 浏览器认为它正在加载页面。如果这需要比预期更长的时间,它会中止并声明。“服务器响应时间过长”

因此,实际上您需要生成/分叉一个单独的进程,并从客户端向服务器发出定期请求,这将导致服务器端脚本连接到该进程并与之交换消息。

例如,参见phpterm

于 2009-03-03T07:01:33.710 回答
1

也许您有理由不考虑它,但是基于 Web 的 shell 进入服务器呢?例如 AjaxTerm ( http://antony.lesuisse.org/software/ajaxterm/ )

我记得,您可以配置它可以登录的用户帐户,然后您可以应用通常的控件来限制用户可以运行哪些脚本(或 chroot?)。

毕竟,如果你想运行一个 shell 脚本,为什么不使用 shell 呢?:)

于 2009-03-04T16:43:32.760 回答
1

听起来像 CGI

于 2009-03-03T06:55:35.380 回答
0

这可能不是一个好主意。交互式 shell 脚本通常不通过网页执行...

但当然有可能。

相反,想想你想要完成什么,并制作一个由标准 Web 组件组成的漂亮 UI。也许您可以构建一些像“向导”一样工作的东西?

于 2009-03-03T07:01:08.377 回答
0

您可以使用Expect模拟用户启动进程作为 nohup 或后台作业,注销,然后定期重新登录以检查其日志文件或提供输入。

于 2010-10-20T11:50:13.973 回答