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?
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:
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:
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:
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.