서비스의 일부로 실행되는 nginx 컨테이너가 있습니다. 이것은 nginx를 포함한 모든 컨테이너를 시작하는 데 사용되는 함수 코드입니다.
if [[ ! -s ${SCRIPT_DIR}/.container-info-patches.txt ]]; then
patches_echo "Patches must be set up before running. Please run 'patches setup' first."
exit 1
fi
all_containers_running=false
while true; do
all_containers_running=true
for container in "${containers[@]}"; do
patches_echo "Checking container status: $container"
status=$(podman container inspect -f '{{.State.Status}}' "$container" 2>/dev/null)
if [[ "$status" != "running" ]]; then
all_containers_running=false
patches_echo "Starting container: $container"
podman start "$container" >/dev/null 2>&1 || patches_echo "Container not found: $container" --error
if [[ $container == "patches-nginx" ]]; then
check_nginx_status
elif [[ $container == "patches-psql" ]]; then
wait_for_postgresql
fi
fi
done
if [[ $all_containers_running == "true" ]]; then
break
fi
if [[ $CONTINUOUS != "TRUE" ]]; then
break
fi
sleep 1
done
수동으로 실행하면 정상적으로 실행되고 모든 컨테이너가 시작됩니다. 부팅 시 실행하기 위해 linger를 사용하여 설정한 사용자 시스템 파일이 있습니다. 모든 컨테이너를 시작합니다.와는 별개로nginx에는 문제가 없습니다. podman logs patches-nginx
재부팅 후 로그를 확인 하면 다음이 표시됩니다.
}[grant@patches ~]$podman logs patches-nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
10.89.0.5 - - [02/Jun/2023:18:48:43 +0000]
"GET / HTTP/1.1" 400 255
"-" "curl/7.76.1"
Certificate: "-"
Client Key: "-"
이것은 400을 발행한 단일 요청을 받았다는 사실 외에는 행복했고 종료할 이유가 없었다는 것을 말해줍니다. 종료되더라도 nginx 시작을 60초 동안 지속적으로 재시도하도록 앞서 언급한 시작 기능을 특별히 설계했습니다. 정말 이상한 점은 코드가 종료되고 60초 창 아래에서 계속 시작하려고 시도하는 코드를 무시한다는 것입니다.
마찬가지로, 서비스 파일이 수동으로 실행되어야 하는 것과 똑같은 코드를 실행하면 모든 것이 예상한 대로 정확하게 작동합니다. 즉, 로그인하고 실행하면 patches.sh start --continuous
표면적으로 모든 서비스 파일이 수행해야 하는 nginx를 포함하여 모든 것이 즉시 나타납니다.
서비스 파일에 관한 어떤 것이 작업을 엉망으로 만들고 있는데 그것이 무엇인지 알 수 없습니다.와는 별개로nginx는 예상대로 정확하게 작동합니다.
서비스 파일은 간단합니다.
[Unit]
Description=Patches Service
Wants=network.target
After=network.target
Requires=user@${USER}.service
[Service]
Type=oneshot
TimeoutStartSec=10min
ExecStart=/bin/bash ${SCRIPT_DIR}/patches.sh start --continuous
[Install]
WantedBy=default.target