From: Dr Scofield <hud@zurich.ibm.com>
* Fixes the admin_shutdown xmlrpc method * Adds a share/python/console/shutdown.py script for shutting down a background OpenSim * For more details see http://xyzzyxyzzy.net/2008/04/29/console-less-opensim/ * There should also be instructions in the opensimulator wiki soon as well0.6.0-stable
parent
97db1e8af0
commit
763ae779ff
|
@ -218,9 +218,6 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
checkStringParameters(request, new string[] { "password", "shutdown" });
|
|
||||||
checkIntegerParams(request, new string[] { "milliseconds"});
|
|
||||||
|
|
||||||
if (requiredPassword != String.Empty &&
|
if (requiredPassword != String.Empty &&
|
||||||
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
||||||
throw new Exception("wrong password");
|
throw new Exception("wrong password");
|
||||||
|
@ -228,28 +225,28 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
responseData["accepted"] = "true";
|
responseData["accepted"] = "true";
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
|
|
||||||
if ((string) requestData["shutdown"] == "delayed")
|
int timeout = 2000;
|
||||||
|
|
||||||
|
if (requestData.ContainsKey("shutdown") &&
|
||||||
|
((string) requestData["shutdown"] == "delayed") &&
|
||||||
|
requestData.ContainsKey("milliseconds"))
|
||||||
{
|
{
|
||||||
int timeout = (Int32) requestData["milliseconds"];
|
timeout = (Int32) requestData["milliseconds"];
|
||||||
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() +
|
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() +
|
||||||
" second(s). Please save what you are doing and log out.");
|
" second(s). Please save what you are doing and log out.");
|
||||||
|
|
||||||
// Perform shutdown
|
|
||||||
Timer shutdownTimer = new Timer(timeout); // Wait before firing
|
|
||||||
shutdownTimer.AutoReset = false;
|
|
||||||
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
|
|
||||||
shutdownTimer.Start();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
|
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
|
||||||
|
|
||||||
// Perform shutdown
|
|
||||||
Timer shutdownTimer = new Timer(2000); // Wait 2 seconds before firing
|
|
||||||
shutdownTimer.AutoReset = false;
|
|
||||||
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
|
|
||||||
shutdownTimer.Start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Perform shutdown
|
||||||
|
Timer shutdownTimer = new Timer(timeout); // Wait before firing
|
||||||
|
shutdownTimer.AutoReset = false;
|
||||||
|
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
|
||||||
|
shutdownTimer.Start();
|
||||||
|
|
||||||
|
responseData["success"] = "true";
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -83,7 +83,6 @@ namespace OpenSim
|
||||||
|
|
||||||
if (background)
|
if (background)
|
||||||
{
|
{
|
||||||
Console.WriteLine("background mode");
|
|
||||||
OpenSimMain sim = new OpenSimMain(configSource);
|
OpenSimMain sim = new OpenSimMain(configSource);
|
||||||
sim.StartUp();
|
sim.StartUp();
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,15 +323,19 @@ namespace OpenSim
|
||||||
//
|
//
|
||||||
// Called from app startup (OpenSim.Application)
|
// Called from app startup (OpenSim.Application)
|
||||||
//
|
//
|
||||||
|
m_log.Info("====================================================================");
|
||||||
m_log.Info("[OPENSIM]: Starting Opensim");
|
m_log.Info("========================= STARTING OPENSIM =========================");
|
||||||
m_log.InfoFormat("[OPENSIM MAIN]: Running in {0} mode", (m_sandbox ? "sandbox" : "grid"));
|
m_log.Info("====================================================================");
|
||||||
|
m_log.InfoFormat("[OPENSIM MAIN]: Running in background {0} mode", m_sandbox ? "sandbox" : "grid");
|
||||||
|
|
||||||
InternalStartUp();
|
InternalStartUp();
|
||||||
|
|
||||||
// We are done with startup
|
// We are done with startup
|
||||||
m_log.Info("[OPENSIM MAIN]: Startup complete, serving " + m_udpServers.Count.ToString() + " region(s)");
|
m_log.InfoFormat("[OPENSIM MAIN]: Startup complete, serving {0} region{1}",
|
||||||
|
m_udpServers.Count.ToString(), m_udpServers.Count > 1 ? "s" : "");
|
||||||
WorldHasComeToAnEnd.WaitOne();
|
WorldHasComeToAnEnd.WaitOne();
|
||||||
|
m_log.Info("[OPENSIM MAIN]: Shutdown complete, goodbye.");
|
||||||
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -684,7 +688,7 @@ namespace OpenSim
|
||||||
public virtual void Shutdown()
|
public virtual void Shutdown()
|
||||||
{
|
{
|
||||||
InternalShutdown();
|
InternalShutdown();
|
||||||
Environment.Exit(0);
|
ApocalypseNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
import ConfigParser
|
||||||
|
import xmlrpclib
|
||||||
|
import optparse
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = optparse.OptionParser()
|
||||||
|
parser.add_option('-c', '--config', dest = 'config', help = 'config file', metavar = 'CONFIG')
|
||||||
|
parser.add_option('-s', '--server', dest = 'server', help = 'URI for the grid server', metavar = 'SERVER')
|
||||||
|
parser.add_option('-p', '--password', dest = 'password', help = 'password for the grid server', metavar = 'PASSWD')
|
||||||
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
|
configFile = options.config
|
||||||
|
if not configFile:
|
||||||
|
if os.path.isfile(os.path.expanduser('~/.opensim-console.rc')):
|
||||||
|
configFile = os.path.expanduser('~/.opensim-console.rc')
|
||||||
|
if not configFile:
|
||||||
|
parser.error('missing option config')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
config = ConfigParser.ConfigParser()
|
||||||
|
config.readfp(open(configFile))
|
||||||
|
|
||||||
|
server = config.get('opensim', 'server')
|
||||||
|
password = config.get('opensim', 'password')
|
||||||
|
|
||||||
|
if options.server: server = options.server
|
||||||
|
if options.password: password = options.password
|
||||||
|
|
||||||
|
gridServer = xmlrpclib.Server(server)
|
||||||
|
res = gridServer.admin_shutdown({'password': password})
|
||||||
|
|
||||||
|
if res['success'] == 'true':
|
||||||
|
print 'shutdown of %s initiated' % server
|
||||||
|
else:
|
||||||
|
print 'shutdown of %s failed' % server
|
Loading…
Reference in New Issue