我有可能/将需要一段时间的任务队列。该任务使用bash脚本和几个参数运行。当用户触发此任务时,他应该能够监视此任务的状态(以及输出)。为此,输出应存储在数据库中,用户界面将获取当前输出。
如何才能最好地运行fetch.sh
,以便将每行输出插入到数据库中,而不仅仅是在脚本完成时?
这样的事情会起作用吗?
shell_exec("./script.sh | while read -r line ; do
sqlite "insert into history (str) values ("$1");
done &> /dev/null &")
答案 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 &