seafile-containerized/seafile-server/scripts/start.py

67 lines
1.7 KiB
Python
Raw Permalink Normal View History

2021-01-17 23:45:50 +00:00
#!/usr/bin/env python3
#coding: UTF-8
"""
Starts the seafile/seahub server and watches the controller process. It is
the entrypoint command of the docker container.
"""
import json
2021-01-17 23:45:50 +00:00
import os
from os.path import abspath, basename, exists, dirname, join, isdir
import shutil
2021-01-17 23:45:50 +00:00
import sys
import time
from utils import (
2021-01-18 23:50:01 +00:00
call, get_conf, get_install_dir, get_script, get_command_output, wait_for_mysql, setup_logging
)
2021-01-17 23:45:50 +00:00
from upgrade import check_upgrade
2021-01-18 23:50:01 +00:00
from bootstrap import init_seafile_server
2021-01-17 23:45:50 +00:00
shared_seafiledir = '/shared/seafile'
ssl_dir = '/shared/ssl'
generated_dir = '/bootstrap/generated'
2021-01-17 23:45:50 +00:00
installdir = get_install_dir()
topdir = dirname(installdir)
def watch_controller():
maxretry = 4
retry = 0
while retry < maxretry:
controller_pid = get_command_output('ps aux | grep seafile-controller | grep -v grep || true').strip()
garbage_collector_pid = get_command_output('ps aux | grep /scripts/gc.sh | grep -v grep || true').strip()
if not controller_pid and not garbage_collector_pid:
retry += 1
else:
retry = 0
time.sleep(5)
print('seafile controller exited unexpectedly.')
sys.exit(1)
def main():
if not exists(shared_seafiledir):
os.mkdir(shared_seafiledir)
if not exists(generated_dir):
os.makedirs(generated_dir)
wait_for_mysql()
init_seafile_server()
check_upgrade()
2021-01-17 23:45:50 +00:00
os.chdir(installdir)
call('{} start'.format(get_script('seafile.sh')))
2021-01-17 23:45:50 +00:00
print('seafile server is running now.')
try:
watch_controller()
except KeyboardInterrupt:
print('Stopping seafile server.')
sys.exit(0)
if __name__ == '__main__':
setup_logging()
main()