我的项目中需要通过Web GUI远程执行交互式shell脚本。这意味着必须在GUI上提供打印到脚本标准输出的内容,并且必须从GUI获取用户输入并将其写入脚本的标准输入。
我的问题是 (a)这是一个好主意(暂时搁置这是一项要求)吗? (b)以前有人解决过这类问题吗?如果是的话,最好的方法是什么呢?
编辑#1:要执行的脚本与Web服务器不在同一主机上。
编辑#2:
感谢您的回复!我担心浏览器端的解决方案不符合我的目的,因为用户可以启动一个或多个脚本,可以关闭浏览器,在一段时间后回来检查脚本的输出并提供输入。
我提出的设计涉及将脚本的输出存储到不同的文件中,当用户启动浏览器时,它开始从文件中读取并继续轮询它(通过Ajax),直到脚本执行完毕
答案 0 :(得分:2)
好像你需要某种后台进程来实现这一点。您无法从单个脚本执行此操作,因为在运行此类脚本时 - 浏览器认为它正在加载页面。如果这需要比预期更长的时间,它就会中止并说明这一点。 “服务器花了很长时间才回应”
所以实际上你需要生成/分叉一个单独的进程,并从客户端向服务器发出定期请求,这将导致服务器端脚本连接到进程并与之交换消息。
例如,请参阅phpterm。
答案 1 :(得分:1)
听起来像CGI
答案 2 :(得分:1)
也许你有理由不考虑它,但是基于网络的shell进入服务器怎么样?例如AjaxTerm(http://antony.lesuisse.org/software/ajaxterm/)
我记得,您可以配置它可以登录的用户帐户,然后您可以应用常用控件来限制用户可以运行的脚本(或chroot?)。
毕竟,如果要运行shell脚本,为什么不使用shell? :)
答案 3 :(得分:0)
这可能不是一个好主意。交互式shell脚本通常不通过网页执行......
但当然有可能。
相反,想一想你想要完成什么,并创建一个由标准Web组件组成的漂亮UI。也许你可以建立像“巫师”一样的东西?
答案 4 :(得分:0)
您可以使用Expect模仿用户启动进程作为nohup或后台作业,注销,然后定期重新登录检查其日志文件或提供输入。