mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
Using `supervisorctl stop all` to stop the server is not terribly discoverable, and may stop services which are not part of Zulip proper. Add an explicit tool which only stops the relevant services. It also more carefully controls the order in which services are stopped to minimize lost requests, and maximally quiesce the server. Locations which may be stopping _older_ versions of Zulip (without this script) are left with using `supervisorctl stop all`. Fixes #14959.
48 lines
1.5 KiB
Bash
Executable File
48 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -e
|
||
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo "Error: This script must be run as root" >&2
|
||
exit 1
|
||
fi
|
||
set -x
|
||
|
||
# What user should we use for connecting to the database
|
||
POSTGRES_USER="${POSTGRES_USER:-postgres}"
|
||
|
||
# This psql command may fail because the Zulip database doesn’t exist,
|
||
# hence the &&.
|
||
if records="$(
|
||
cd / # Make sure the current working directory is readable by postgres
|
||
su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1 -Atc 'SELECT COUNT(*) FROM zulip.zerver_message;' zulip"
|
||
)" && [ "$records" -gt 200 ]; then
|
||
set +x
|
||
echo "WARNING: This will delete your Zulip database which currently contains $records messages."
|
||
read -p "Do you want to proceed? [y/N] " -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
exit 1
|
||
fi
|
||
set -x
|
||
fi
|
||
|
||
# Shut down all services to ensure a quiescent state.
|
||
if [ -e "/var/run/supervisor.sock" ]; then
|
||
su zulip -c "$(dirname "$(dirname "$0")")/stop-server"
|
||
fi
|
||
|
||
# Drop any open connections to any old database.
|
||
# Send the script via stdin in case the postgres user lacks permission to read it.
|
||
su -s /usr/bin/env - -- "$POSTGRES_USER" \
|
||
bash -s - zulip zulip_base <"$(dirname "$0")/terminate-psql-sessions"
|
||
|
||
(
|
||
cd / # Make sure the current working directory is readable by postgres
|
||
su "$POSTGRES_USER" -c 'psql -v ON_ERROR_STOP=1 -e'
|
||
) <"$(dirname "$0")/create-db.sql"
|
||
|
||
# Clear memcached to avoid contamination from previous database state
|
||
"$(dirname "$0")/flush-memcached"
|
||
|
||
echo "Database created"
|