Re: Starting a background process and reporting failure if applicable
| From: | Stefan A. | Date: | Tue, 18 Aug 2020 03:28:24 +0000 |
| Subject: | Re: Starting a background process and reporting failure if applicable | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-327293@lists.php.net to get a copy of this message | ||
A somewhat hacky way to do it, would be like this
exec('(nohup php sleeps_nonexist.php > /tmp/tt 2>&1; echo $?) &', $output,
$status);
then instead of checking the $status variable, you would check the $output
which in this case would have the value '1' at index 0 or the value '0' if
the command executed successfully.
I don't know how reliable this is.
On Mon, Aug 17, 2020 at 9:23 PM Paul M Foster <paulf@quillandmouse.com>
wrote:
> On Mon, Aug 17, 2020 at 02:51:58PM -0400, Tedd Sperling wrote:
>
> >
> >
> > > On Aug 17, 2020, at 9:14 AM, Jānis Elmeris <janis.elmeris@lv.lv>
> wrote:
> > >
> > > Hello!
> > >
> > > I would like to start a PHP script in the background from within
> another PHP script. I would like to monitor all error cases properly.
> > >
> > > Is there an easy way to see if that background script was started
> successfully? The background script would write its errors into an error
> log that I'm monitoring. But what about starting the script itself?
> > >
> > > I'm trying to start a background script like this:
> > >
> > > exec('nohup php sleeps.php > /tmp/tt 2>&1 &', $output,
> > > $status);
> > > error_log('execute_shell: ' . var_export(['status' => $status,
> 'output' => $output], true));
> > > exec('nohup php sleeps_nonexist.php > /tmp/tt 2>&1 &',
> > > $output,
> $status);
> > > error_log('execute_shell: ' . var_export(['status' => $status,
> 'output' => $output], true));
> > >
> > > The first
exec runs all right in the background
> > > (asynchronously).
> > > The second one behaves in exactly the same way ($status ===
> > > 0), even
> though file "sleeps_nonexist.php" does not exist.
> > >
> > > Running in the command line manually, this would give status
> > > 0:
> > > nohup php sleeps.php > /tmp/tt 2>&1
> > > echo $?
> > >
> > > This would give status 1:
> > > nohup php sleeps_nonexist.php > /tmp/tt 2>&1
> > > echo $?
> > >
> > > Regards,
> > > Janis
> >
> >
> > Janis:
> >
> > Look at header — it’s much simpler.
> >
> > For example, I often use it to start another script from within a
> script, like so:
> >
> > if ($auth == 0)
> > {
> > // send user to log on page
> > header('Location:log-on.php');
> > exit();
> > }
> >
>
> Yeah, but header doesn't run asynchronously does it? Plus, even if the
> "header" script returns, that exit() call will abort the parent script.
>
> Paul
>
> --
> Paul M. Foster
> http://noferblatz.com
> http://quillandmouse.com
>