ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

bash脚本执行从php和瞬时输出回到网页

2019-05-30 09:18:15  阅读:190  来源: 互联网

标签:php bash perl nonblocking


我有一个bash和Perl脚本的集合

>开发在linux机器上部署所需的目录结构
>(可选)从svn导出代码
>从此源构建一个包

这在终端上运行良好.现在我的客户端请求此过程的Web界面.

例如,某个页面上的“Create New Package”按钮将逐个调用上述步骤,并将输出作为脚本回声返回给用户,而不是在整个脚本执行时.

是否有可能将bash脚本的瞬时输出发送到网页或php脚本,该脚本通过程序执行功能(system,exec,passthru ……或任何其他适合此流程的东西)调用它?

什么是优雅为什么这样做?

在做这样的事情时我应该采取哪些安全预防措施(如果可能的话)?

编辑
经过一些搜索,我找到了解决方案的一部分,但仍然没有工作:

$cmd = 'cat ./password.txt|sudo  -S  ./setup.sh ';

$descriptorspec = array(
        0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
        1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
        2 => array("pipe", "w") // stderr is a pipe that the child will read from
);

flush();

$process = proc_open($cmd, $descriptorspec, $pipes, './', array());
echo "<pre>";
if (is_resource($process)) {    

    while ($s = fgets($pipes[1])) {
        print "Message:".$s;
        flush();
    }
    while ($s = fgets($pipes[2])) {
        print "Error:".$s;
        flush();
    }
}
echo "</pre>";

输出:(网页)

Error:WARNING: Improper use of the sudo command could lead to data loss
Error:or the deletion of important system files. Please double-check your
Error:typing when using sudo. Type "man sudo" for more information.
Error:
Error:To proceed, enter your password, or type Ctrl-C to abort.
Error:
Error:Password:
Error:Sorry, try again.
Error:Password:
Error:Sorry, try again.
Error:Password:
Error:Sorry, try again.
Error:sudo: 3 incorrect password attempts**

我现在要做的第一个问题是通过sudo passoword

请帮忙 !

解决方法:

我会使用一种主/从设计.奴隶将是你的perl / bash脚本,只是做一份工作(打包,编译,导出代码等),并提供一个日志条目.

主人将是你的PHP进程.因此原理如下:主设备和从设备共享通信信道,并从该信道异步通信.

您可以想象一个数据库,如:

create table tasks ( id INT primary key, status INT, argument VARCHAR(100));

你的php页面应该切换用户选择,并过滤输入:

switch ($_GET['action']) {
   case 'export':
       $argument = sanitize($_GET['arg']);
       add_task('export', $argument);
       break;
   case '...': 
     // ...
}

add_task函数可能是这样的:

function add_task($action, $arg)
{
   return $db->add('tasks', array($action, NEW_TASK, $arg);
}

奴隶可以通过cron job运行,并查询数据库,提供任务的进展.

专业人士是:

>独立系统,缓解进化.
>如果客户端断开连接,则作业永远不会丢失
>更容易保护

缺点是:

>一开始有点复杂.
>反应性较低,因为奴隶的轮询时间在运行(例如,如果他们每5分钟运行一次)
>输出少于命令的直接输出

请注意,您可以实现xml-rpc之类的触发器来运行从属服务器,而不是使用消息传递系统.

标签:php,bash,perl,nonblocking
来源: https://codeday.me/bug/20190530/1182913.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有