任何从网页执行bash脚本并在执行时捕获输出的方法
Any way to execute a bash Script from Webpage and Catching the Output while it executes?
我在我的Ubuntu 10.04服务器上得到了一些长时间运行的bash脚本,这些脚本正在做备份和数据库转储等事情。
我目前正在通过cron执行它们并将结果邮寄给我。不过,如果能通过web界面手动触发它们就更好了。(我不想给任何用户SSH访问权限,这样他就可以触发脚本)
例如,在PHP中,有一个exec命令,它在脚本完成后获取脚本输出。这是没有用的,因为脚本持续时间超过30秒浏览器超时。(我想监控进度)所以我目前困在寻找如何定期收集脚本输出或"跟踪",并通过JavaScript或Pagereloads或类似的东西显示它的方法。正如我注意到的,例如,Webmin在通过其webinterface运行apt之类的系统命令时就会这样做。
我可以想象的一种方法是分叉脚本执行并将输出重定向到一个文件,而主进程在页面重新加载/Ajax请求时读取它。但这听起来像是一种变通方法:)
那么,对于这个问题,有人有好的解决方案吗?不需要是PHP,也可以是python或perl或其他任何在服务器端。或者是否有工具或库来处理这些事情?
任何想法都非常感谢!
我不确定您是否打算在您的解决方案中需要PHP,但如果不是…
在过去,我用Jenkins来做这类事情。您可以使用它作为cron替代和作为手动触发脚本的一种方式,同时保留发生的日志。
Jenkins可以设置为一些用户只有触发作业的权限,而不是Jenkins管理员可以做像设置和编辑作业之类的事情。
如果你喜欢收到邮件,Jenkins也可以这样做。如果有的话,Jenkins最大的缺点是它是超级灵活/可配置的,所以并不总是很明显如何最好地设置它来满足一个人的特定需求。
任何语言都可以。我可以推荐Webmin的大锤式方法。
http://www.webmin.com/的优点是你所要求的东西是内置的,你不需要编写任何程序。
PHP中的应该看
缓冲区和刷新。您基本上可以在接收到输出时输出到页面。
http://php.net/manual/en/function.ob-start.php请参阅popen系统的相关问题
我做了类似的事情(快速和肮脏,但可能不是很有效)我使用一个数据库日志表来存储输出(来自后端脚本)然后,网页将定期发出ajax请求,只获取之前没有获取的日志,并将其显示(附加)到前端。
数据库表非常简单,只有
列。id(auto increment)
log_text
script_identifier(如果跟踪多个脚本是唯一的)
last_modified_time
output_display (value = 0告诉ajax没有读取这个输出)
一个简单的过程是这样的打开一个网页,单击一个按钮发送一个ajax请求来启动后端脚本每隔5秒发送另一个ajax请求,查看是否有未读日志表行如果有未读的行,将它们标记为已读,获取它们并显示
你可以在很多方面提高,比如使用apc或memcached代替数据库表保持日志表较小,或者为每个脚本动态创建日志表
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 从一个文本框执行代码,并在另一个文本框中以 HTML 显示输出
- 如何基于javascript confirm()输出执行href
- 在文件中执行 IIFE 时出现意外输出.js
- 量角器 - 如何在输出文本文件中生成执行报告或显示控制台.log消息
- 获取块上的可执行文件标准输出
- 输出脚本标签而不带jQuery,避免执行
- 从HTML页面执行外部.js文件,通过发送输入.xml并从外部文件获取输出.xml.js文件
- 我们不能在文件中编写和执行 JavaScript 代码并在控制台中查看输出吗?
- phantomjs - 在页面加载后执行Javascript函数,然后输出新的更改
- 如何遍历数组,随机输出两个字符串,并根据答案执行它们
- 如何将执行输出显示到文本区域中
- 执行:显示标准输出“实时”
- 使用 python 在给定的网站列表上执行 JavaScript 并将结果输出到 csv
- Nodejs执行节点文件并获取其输出
- Javascript代码在执行输出中返回undefined:Nan
- Browserify输出代码没有't在浏览器中执行
- 如何在windows中执行本地本地编译的代码,并将输出用作webmail应用程序的输入
- Rails javascript_tag输出未执行
- 在执行页面's javascript后保存页面的HTML输出