PHP执行bash脚本,将输出重定向到数据库

时间:2016-03-24 21:14:07

标签: php bash shell asynchronous nonblocking

我有可能/将需要一段时间的任务队列。该任务使用bash脚本和几个参数运行。当用户触发此任务时,他应该能够监视此任务的状态(以及输出)。为此,输出应存储在数据库中,用户界面将获取当前输出。

如何才能最好地运行fetch.sh,以便将每行输出插入到数据库中,而不仅仅是在脚本完成时?

这样的事情会起作用吗?

shell_exec("./script.sh | while read -r line ; do 
   sqlite "insert into history (str) values ("$1"); 
done &> /dev/null &")

1 个答案:

答案 0 :(得分:0)

也许这样的事情对你有用:

$db = new SQLite3('mydb');

if( ($fp = popen("./script.sh", "r")) ) {
  while( !feof($fp) ){
      $line = fread($fp, 1024);
      $db->exec("insert into history (str) values ({$line})");
   }
  fclose($fp);
}

更新

事实证明 - 有一种相对简单的方法可以在后台运行它

说,我们的脚本名为logger.php

在这种情况下 - 我们可以这样做:

nohup php -q logger.php > script.log 2>&1 &