mirror of https://github.com/zulip/zulip.git
scripts: Add a script to stop the server.
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.
This commit is contained in:
parent
31169526ec
commit
476524c0c1
|
@ -257,7 +257,7 @@ For best results, you'll want to shut down access to the organization
|
||||||
before exporting; so that nobody can send new messages (etc.) while
|
before exporting; so that nobody can send new messages (etc.) while
|
||||||
you're exporting data. There are two ways to do this:
|
you're exporting data. There are two ways to do this:
|
||||||
|
|
||||||
1. `supervisorctl stop all`, which stops the whole server. This is
|
1. `./scripts/stop-server`, which stops the whole server. This is
|
||||||
preferred if you're not hosting multiple organizations, because it has
|
preferred if you're not hosting multiple organizations, because it has
|
||||||
no side effects other than disabling the Zulip server for the
|
no side effects other than disabling the Zulip server for the
|
||||||
duration.
|
duration.
|
||||||
|
@ -282,7 +282,7 @@ following commands:
|
||||||
|
|
||||||
```
|
```
|
||||||
cd /home/zulip/deployments/current
|
cd /home/zulip/deployments/current
|
||||||
# supervisorctl stop all # Stops the Zulip server
|
# ./scripts/stop-server
|
||||||
# export DEACTIVATE_FLAG="--deactivate" # Deactivates the organization
|
# export DEACTIVATE_FLAG="--deactivate" # Deactivates the organization
|
||||||
./manage.py export -r '' $DEACTIVATE_FLAG # Exports the data
|
./manage.py export -r '' $DEACTIVATE_FLAG # Exports the data
|
||||||
```
|
```
|
||||||
|
@ -316,7 +316,7 @@ archive of all the organization's uploaded files.
|
||||||
several months of development ahead of the latest release.
|
several months of development ahead of the latest release.
|
||||||
|
|
||||||
* Note that if your server has limited free RAM, you'll want to
|
* Note that if your server has limited free RAM, you'll want to
|
||||||
shut down the Zulip server with `supervisorctl stop all` while
|
shut down the Zulip server with `./scripts/stop-server` while
|
||||||
you run the import, since our minimal system requirements do not
|
you run the import, since our minimal system requirements do not
|
||||||
budget extra RAM for running the data import tool.
|
budget extra RAM for running the data import tool.
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,9 @@ Similarly, you can stop Zulip using:
|
||||||
supervisorctl stop all
|
supervisorctl stop all
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you're looking to shut down the server, it is often better to run
|
||||||
|
`./scripts/stop-server`.
|
||||||
|
|
||||||
## Troubleshooting services
|
## Troubleshooting services
|
||||||
|
|
||||||
The Zulip application uses several major open source services to store
|
The Zulip application uses several major open source services to store
|
||||||
|
|
|
@ -415,7 +415,6 @@ To upgrade the version of PostgreSQL on the Zulip server:
|
||||||
2. Stop the server and take a backup:
|
2. Stop the server and take a backup:
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo -i # Or otherwise get a root shell
|
|
||||||
supervisorctl stop all
|
supervisorctl stop all
|
||||||
/home/zulip/deployments/current/manage.py backup --output=/home/zulip/postgresql-upgrade.backup.tar.gz
|
/home/zulip/deployments/current/manage.py backup --output=/home/zulip/postgresql-upgrade.backup.tar.gz
|
||||||
```
|
```
|
||||||
|
|
|
@ -28,7 +28,7 @@ fi
|
||||||
|
|
||||||
# Shut down all services to ensure a quiescent state.
|
# Shut down all services to ensure a quiescent state.
|
||||||
if [ -e "/var/run/supervisor.sock" ]; then
|
if [ -e "/var/run/supervisor.sock" ]; then
|
||||||
supervisorctl stop all
|
su zulip -c "$(dirname "$(dirname "$0")")/stop-server"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Drop any open connections to any old database.
|
# Drop any open connections to any old database.
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import pwd
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
|
||||||
|
from scripts.lib.zulip_tools import ENDC, OKGREEN, WARNING
|
||||||
|
|
||||||
|
deploy_path = os.path.realpath(os.path.join(os.path.dirname(__file__), ".."))
|
||||||
|
os.chdir(deploy_path)
|
||||||
|
|
||||||
|
if pwd.getpwuid(os.getuid()).pw_name != "zulip":
|
||||||
|
logging.error("Must be run as user 'zulip'.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
logging.Formatter.converter = time.gmtime
|
||||||
|
logging.basicConfig(format="%(asctime)s stop-server: %(message)s", level=logging.INFO)
|
||||||
|
|
||||||
|
services = []
|
||||||
|
|
||||||
|
# Start with the least-critical services:
|
||||||
|
if os.path.exists("/etc/supervisor/conf.d/zulip/zulip_db.conf"):
|
||||||
|
services.append("process-fts-updates")
|
||||||
|
|
||||||
|
if os.path.exists("/etc/supervisor/conf.d/zulip/thumbor.conf"):
|
||||||
|
services.append("zulip-thumbor")
|
||||||
|
|
||||||
|
# Contrary to the order in (re)start-server, we stop django before the
|
||||||
|
# workers, to increase the chance that we finish processing any work
|
||||||
|
# that may have been enqueued by the Django, leaving the final state
|
||||||
|
# closer to "empty." We stop Django before Tornado so it doesn't try
|
||||||
|
# to make requests to make queues with a down'd Tornado.
|
||||||
|
services.append("zulip-django")
|
||||||
|
services.extend(["zulip-tornado", "zulip-tornado:*"])
|
||||||
|
services.append("zulip-workers:*")
|
||||||
|
|
||||||
|
subprocess.check_call(["supervisorctl", "stop", *services])
|
||||||
|
|
||||||
|
print()
|
||||||
|
print(OKGREEN + "Zulip stopped successfully!" + ENDC)
|
||||||
|
|
||||||
|
using_sso = subprocess.check_output(["./scripts/get-django-setting", "USING_APACHE_SSO"])
|
||||||
|
if using_sso.strip() == b"True":
|
||||||
|
print()
|
||||||
|
print(WARNING + "Apache2 needs to be shut down; as root, run:" + ENDC)
|
||||||
|
print(" service apache2 stop")
|
||||||
|
print()
|
|
@ -49,7 +49,7 @@ the most common configuration, run the following commands:
|
||||||
|
|
||||||
```
|
```
|
||||||
cd /home/zulip/deployments/current
|
cd /home/zulip/deployments/current
|
||||||
supervisorctl stop all # Stop the Zulip server
|
./scripts/stop-server
|
||||||
./manage.py convert_gitter_data gitter_data.json --output converted_gitter_data
|
./manage.py convert_gitter_data gitter_data.json --output converted_gitter_data
|
||||||
./manage.py import '' converted_gitter_data
|
./manage.py import '' converted_gitter_data
|
||||||
./scripts/restart-server
|
./scripts/restart-server
|
||||||
|
|
|
@ -149,7 +149,7 @@ the most common configuration, run the following commands, replacing
|
||||||
cd /home/zulip
|
cd /home/zulip
|
||||||
tar -xzvf export.tar.gz
|
tar -xzvf export.tar.gz
|
||||||
cd /home/zulip/deployments/current
|
cd /home/zulip/deployments/current
|
||||||
supervisorctl stop all # Stop the Zulip server
|
./scripts/stop-server
|
||||||
./manage.py convert_mattermost_data /home/zulip/mattermost --output /home/zulip/converted_mattermost_data
|
./manage.py convert_mattermost_data /home/zulip/mattermost --output /home/zulip/converted_mattermost_data
|
||||||
./manage.py import "" /home/zulip/converted_mattermost_data/<team-name>
|
./manage.py import "" /home/zulip/converted_mattermost_data/<team-name>
|
||||||
./scripts/restart-server
|
./scripts/restart-server
|
||||||
|
|
|
@ -79,7 +79,7 @@ the most common configuration, run the following commands, replacing
|
||||||
|
|
||||||
```
|
```
|
||||||
cd /home/zulip/deployments/current
|
cd /home/zulip/deployments/current
|
||||||
supervisorctl stop all # Stop the Zulip server
|
./scripts/stop-server
|
||||||
./manage.py convert_slack_data slack_data.zip --token <token> --output converted_slack_data
|
./manage.py convert_slack_data slack_data.zip --token <token> --output converted_slack_data
|
||||||
./manage.py import '' converted_slack_data
|
./manage.py import '' converted_slack_data
|
||||||
./scripts/restart-server
|
./scripts/restart-server
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
set -e
|
set -e
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
ZULIP_PATH=/home/github/zulip
|
cd /home/github/zulip
|
||||||
|
|
||||||
supervisorctl stop all
|
su zulip -c ./scripts/stop-server
|
||||||
"$ZULIP_PATH"/scripts/setup/upgrade-postgresql
|
./scripts/setup/upgrade-postgresql
|
||||||
supervisorctl start all
|
supervisorctl start all
|
||||||
|
|
||||||
echo "Upgrade of PostgreSQL complete!"
|
echo "Upgrade of PostgreSQL complete!"
|
||||||
|
|
Loading…
Reference in New Issue