Re: Starting a background process and reporting failure if applicable

From: 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 >

« previous php.general (#327293) next »