gpt4 book ai didi

bash - 如何在 ENTRYPOINT 等待 postgres 启动?

转载 作者:IT老高 更新时间:2023-10-28 12:47:18 27 4
gpt4 key购买 nike

在继续执行 nosetests 之前等待 postgres 在我的 ENTRYPOINT 内完全启动的最佳方法是什么?

现在,我已将机器上的启动时间设置为 50 秒左右。所以我只睡了60秒。这感觉不好,因为在另一台机器上运行时可能无法正常工作。

ENTRYPOINT \
runuser -l postgres -c '/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf & ' && \
sleep 60 && \
nosetests --verbose --cover-erase --with-coverage --cover-package=stalker

这是启动postgres的输出:

2017-02-13 13:46:49.541 UTC [9] LOG:  database system was interrupted; last known up at 2017-02-13 12:53:23 UTC
2017-02-13 13:47:37.951 UTC [9] LOG: database system was not properly shut down; automatic recovery in progress
2017-02-13 13:47:37.994 UTC [9] LOG: redo starts at 0/1783EA0
2017-02-13 13:47:37.995 UTC [9] LOG: record with zero length at 0/17841E8
2017-02-13 13:47:37.995 UTC [9] LOG: redo done at 0/17841B8
2017-02-13 13:47:37.995 UTC [9] LOG: last completed transaction was at log time 2017-02-13 12:53:23.731984+00
2017-02-13 13:47:38.384 UTC [9] LOG: MultiXact member wraparound protections are now enabled
2017-02-13 13:47:38.387 UTC [7] LOG: database system is ready to accept connections
2017-02-13 13:47:38.387 UTC [13] LOG: autovacuum launcher started

请,我明白这违反了在 ENTRYPOINT 中运行多个命令的惯例。在这种情况下,我有充分的理由这样做。

最佳答案

感谢@zeppelin 建议pg_isready。我最终使用了这个:

#!/bin/bash
# wait-for-postgres.sh

set -e

cmd="$@"
timer="5"

until runuser -l postgres -c 'pg_isready' 2>/dev/null; do
>&2 echo "Postgres is unavailable - sleeping for $timer seconds"
sleep $timer
done

>&2 echo "Postgres is up - executing command"
exec $cmd

我在我的 ENTRYPOINT 中使用它:

ENTRYPOINT \

# Start PostgreSQL
runuser -l postgres -c '/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf & ' && \

# Exectute tests when db is up
./wait-for-postgres.sh nosetests --verbose --cover-erase --with-coverage --cover-package=stalker

关于bash - 如何在 ENTRYPOINT 等待 postgres 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42206131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com