Re: Starting a background process and reporting failure if applicable
| From: | Jānis Elmeris | Date: | Tue, 18 Aug 2020 11:39:53 +0000 |
| Subject: | Re: Starting a background process and reporting failure if applicable | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-327299@lists.php.net to get a copy of this message | ||
Can you give an example, please?
I'm trying this, for example:
<?php
function execute_shell($command_in, $in_background = false) {
$command = "$command_in > /dev/null &";
$process = proc_open("$command", [0 => ['pipe', 'r'], 1 =>
['pipe', 'w'],
2 => ['pipe', 'a']], $pipes);
error_log('execute_shell: ' . var_export(['command' => $command_in,
'process' => $process, 'pipes' => $pipes], true));
}
execute_shell('php sleeps.php', true);
execute_shell('php sleeps_nonexist.php', true);
Where script
sleeps.php sleeps for 3 seconds and writes its progress into
a file (error log), and file sleeps_nonexist.php does not exist.
I don't see how I can detect whether the background script was launched
successfully or not.
[18-Aug-2020 14:34:17 Europe/Helsinki] execute_shell: array (
'command' => 'php sleeps.php',
'process' => NULL,
'pipes' =>
array (
0 => NULL,
1 => NULL,
2 => NULL,
),
)
[18-Aug-2020 14:34:17 Europe/Helsinki] execute_shell: array (
'command' => 'php sleeps_nonexist.php',
'process' => NULL,
'pipes' =>
array (
0 => NULL,
1 => NULL,
2 => NULL,
),
)
[18-Aug-2020 14:34:17 Europe/Helsinki] sleep to erorr log1
[18-Aug-2020 14:34:20 Europe/Helsinki] sleep to erorr log2
I would also be satisfied if the error is written to a file, but pointing
the stderr in proc_open to the error log file gave no output either.
Regards,
Janis
pirmd., 2020. g. 17. aug., plkst. 16:30 — lietotājs Aziz Saleh (<
azizsaleh@gmail.com>) rakstīja:
> It would be better to use proc_open imo which will allow you to get the
> output/state built in php functionality:
>
> https://www.php.net/manual/en/function.proc-open.php
>
> On Mon, Aug 17, 2020 at 9:15 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@u°™NÅbÝ à¢
>> cÚ), 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
>>
>