Run a cgi shell script in background

2019-02-19 15:53发布

问题:

I've a cgi shell script like this

#!/bin/sh

# show the page
echo Content-type: text/html
echo
echo "<html><b>Hello world!</b></html>"

# the task I want to do in background
sleep 100
echo $(date) >> log

I want to page to show after the last echo, not at the end of the execution of the script. I've tried putting the code in another file and execute it like this ./background.sh &. It works in console but not in the browser.

I use lighttpd

回答1:

Close stdout with exec >&- before you execute your long-running or background task. Maybe you'll also have to close stderr. That would be

exec >&-
exec 2>&-

(it seems you can't close both in one line)

This will break the pipe and allow your web server to send the data already outputted (such as via echo) to the browser.



标签: shell cgi