es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El script cgi-fcgi no se está ejecutando correctamente.

Estoy utilizando:

/usr/local/bin # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.12.7
PRETTY_NAME="Alpine Linux v3.12"

con el shell /bin/ash.

Tengo un script que verifica un estado:

#!/bin/sh


full=$(DOCUMENT_URI=/api/$SERVICE_PREFIX/healthz SCRIPT_FILENAME=/app/src/index.php REQUEST_METHOD=GET cgi-fcgi -bind -connect /run/php-fpm/php.sock)

before=${full%'\r\n\r\n'*}
after=${full#*'\r\n\r\n'}
stat=$(echo $before | sed 's/.*Status: //' | cut -d " " -f 1)
sub="Status:"


echo "head is: $before"
echo "tail is: $after"
echo "message is: $full"
echo "status is: $stat"
echo "substring is: $sub"
echo "message is: ${sub} ${stat}"



if [[ "$before" == *"$sub"* ]] && [[ "$stat" != "200" ]]; then
  exit 1
fi


if [ "$after" != "OK" ]; then
  exit 1
fi

exit

Cuando ejecuto el script, obtengo una respuesta que es correcta, pero la instrucción if no funciona:

/usr/local/bin # ./liveness_probe1.sh
head is: Status: 300 Multiple Choices
X-Powered-By: PHP/7.4.16
Content-type: text/html; charset=UTF-8
tail is: OK
message is: Status: 300 Multiple Choices
X-Powered-By: PHP/7.4.16
Content-type: text/html; charset=UTF-8

OK
status is: 300
substring is: Status:
message is: Status: 300
/usr/local/bin # echo $?
0

y cuando ejecuto solo un comando, obtengo una respuesta diferente:

/usr/local/bin # DOCUMENT_URI=/api/$SERVICE_PREFIX/healthz SCRIPT_FILENAME=/app/src/index.php REQUEST_METHOD=GET cgi-fcgi -bind -connect /run/php-fpm/php.so
ck
Status: 300 Multiple Choices
X-Powered-By: PHP/7.4.16
Content-type: text/html; charset=UTF-8

OK

¿Hay algún error en este script?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la salida proporcionada, la declaración if en el script parece no estar funcionando correctamente, ya que debería finalizar con un código de salida de 1 cuando se cumple cualquiera de las condiciones.

    Para solucionar este problema, puedes intentar agregar algunas declaraciones de depuración para verificar los valores de las variables antes y después de la declaración if. Por ejemplo, puedes agregar las siguientes líneas después de las declaraciones if:

    echo "antes de la condición 1: $before"
    echo "estado de la condición 1: $stat"
    echo "después de la condición 1: $after"
    echo "antes de la condición 2: $before"
    echo "después de la condición 2: $after"
    

    Esto te ayudará a determinar si las variables tienen los valores esperados y si las condiciones se evalúan correctamente.

    Otra cosa que puedes intentar es modificar las declaraciones if para usar los códigos de salida de los comandos en lugar de comparar las cadenas. Por ejemplo, puedes modificar la primera declaración if de la siguiente manera:

    if [ $? -ne 0 ] || [ "$stat" != "200" ]; then
      exit 1
    fi
    

    Esto verificará el código de salida del primer comando ($?), que debería ser 0 en caso de éxito y distinto de cero en caso de fallo. Si es distinto de cero, finalizará con un código de salida de 1. La segunda condición comprobará si la variable de estado no es igual a 200.

    De manera similar, puedes modificar la segunda declaración if de la siguiente manera:

    if [ "$after" != "OK" ]; then
      exit 1
    fi
    

    Esto comprobará si el valor de la variable after no es igual a “OK” y finalizará con un código de salida de 1 si no lo es.

    En general, el script parece estar mayormente correcto, pero puede haber problemas con la forma en que se evalúan las declaraciones if.

Comments are closed.