load .profile con proc_open ()

Aquí está la situación: escribí una aplicación de fondo, que se ejecuta en un servidor determinado. En este servidor, hay un script que se puede ejecutar desde el servidor front-end, a través de ssh. Mi script luego verificará si las variables de entorno que necesita están cargadas correctamente porque confío mucho en ellas en el script mismo.

Esto funciona, aunque no de la forma en que quiero que las cosas funcionen. A medida que se establece la conexión, el ./perfil no se carga simplemente usandoexec('source /home/user/.profile'); no funciona, por supuesto. Ya que el script ya se está ejecutando. Es por eso que el script comienza así:

#!/to/php/bin/php -n
<?php
    if (!$_SERVER['VAR_FROM_PROFILE'])
    {
        exec('/absolute/path/to/helperscript '.implode(' ',$argv),$r,$s);
        if ($s !== 0)
        {
            die('helper script fails: '.$s);
        }
        exit($r[0]);
    }

Ese script de ayuda es un script ksh:

#!/path/ksh
source /.profile
$*

cargar el perfil y volver a llamar al primer script. Quiero que este segundo script desaparezca, me parece una tontería ... necesitar un segundo script para ejecutar el primero. Sé que es posible establecer valores de entorno con proc_open, pero reescribiendo el .profile como un conjunto de sopas aún más tonto. También intentéproc_open un shell, cargue el perfil y vuelva a ejecutar el script desde dentro de sí mismo. Solo para descubrir que el script sigue llamándose a sí mismo, lo que me lleva a creer que el perfil no está cargado en absoluto.

Aquí está mi intento hasta ahora:

#!/to/php/bin/php -n
<?php
    if (!$_SERVER['VAR_FROM_PROFILE'] && $argv[1] !== 'fromself')
    {
        $res = proc_open('ksh',array(array('pipe','r'),array('pipe','w'),array('pipe','w')),$pipes);
        usleep(5);
        fwrite($pipes[0],'source /home/user/.profile & '.$argv[0].' fromself');
        fclose($pipes[0]);//tried using fflush and a second fwrite. It failed, too
        usleep(1);
        echo stream_get_contents($pipes[1]);
        fclose($pipes[1]);
        proc_close($res);
        exit();
    }
    var_dump($_SERVER);
?>

No tuve suerte con esto hasta ahora, ¿alguien puede decirme si estoy olvidando algo aquí? ¿Qué estoy haciendo mal? ¿Estoy pasando por alto algo aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta