85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| # Copyright 2014, 2015 OpenMarket Ltd
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| import os.path
 | |
| import subprocess
 | |
| import signal
 | |
| import yaml
 | |
| 
 | |
| SYNAPSE = ["python", "-B", "-m", "synapse.app.homeserver"]
 | |
| 
 | |
| GREEN = "\x1b[1;32m"
 | |
| RED = "\x1b[1;31m"
 | |
| NORMAL = "\x1b[m"
 | |
| 
 | |
| 
 | |
| def start(configfile):
 | |
|     print "Starting ...",
 | |
|     args = SYNAPSE
 | |
|     args.extend(["--daemonize", "-c", configfile])
 | |
| 
 | |
|     try:
 | |
|         subprocess.check_call(args)
 | |
|         print GREEN + "started" + NORMAL
 | |
|     except subprocess.CalledProcessError as e:
 | |
|         print (
 | |
|             RED +
 | |
|             "error starting (exit code: %d); see above for logs" % e.returncode +
 | |
|             NORMAL
 | |
|         )
 | |
| 
 | |
| 
 | |
| def stop(pidfile):
 | |
|     if os.path.exists(pidfile):
 | |
|         pid = int(open(pidfile).read())
 | |
|         os.kill(pid, signal.SIGTERM)
 | |
|         print GREEN + "stopped" + NORMAL
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     configfile = sys.argv[2] if len(sys.argv) == 3 else "homeserver.yaml"
 | |
| 
 | |
|     if not os.path.exists(configfile):
 | |
|         sys.stderr.write(
 | |
|             "No config file found\n"
 | |
|             "To generate a config file, run '%s -c %s --generate-config"
 | |
|             " --server-name=<server name>'\n" % (
 | |
|                 " ".join(SYNAPSE), configfile
 | |
|             )
 | |
|         )
 | |
|         sys.exit(1)
 | |
| 
 | |
|     config = yaml.load(open(configfile))
 | |
|     pidfile = config["pid_file"]
 | |
| 
 | |
|     action = sys.argv[1] if sys.argv[1:] else "usage"
 | |
|     if action == "start":
 | |
|         start(configfile)
 | |
|     elif action == "stop":
 | |
|         stop(pidfile)
 | |
|     elif action == "restart":
 | |
|         stop(pidfile)
 | |
|         start(configfile)
 | |
|     else:
 | |
|         sys.stderr.write("Usage: %s [start|stop|restart] [configfile]\n" % (sys.argv[0],))
 | |
|         sys.exit(1)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |