Re: Starting a background process and reporting failure if applicable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Additionally you can also look at libraries such symfony/process https://symfony.com/doc/current/components/process.html#running-processes-asynchronously 

On Tue, Aug 18, 2020 at 5:28 AM Stefan A. <acid24@xxxxxxxxx> wrote:
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@xxxxxxxxxxxxxxxxx> 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@xxxxx> 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

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux