Re: Starting a background process and reporting failure if applicable

From: Date: Tue, 18 Aug 2020 03:40:24 +0000
Subject: Re: Starting a background process and reporting failure if applicable
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-327294@lists.php.net to get a copy of this message
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@gmail.com> 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@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 >> >

« previous php.general (#327294) next »