问题
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.
来源:https://stackoverflow.com/questions/6033780/run-a-cgi-shell-script-in-background