Add marker files to the restart module so external scripts can be used to
kill a process that hasn't restarted properlyavinationmerge
parent
33c023bf6a
commit
cccfd1db34
|
@ -28,6 +28,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
|
using System.IO;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
@ -56,13 +58,23 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
protected UUID m_Initiator;
|
protected UUID m_Initiator;
|
||||||
protected bool m_Notice = false;
|
protected bool m_Notice = false;
|
||||||
protected IDialogModule m_DialogModule = null;
|
protected IDialogModule m_DialogModule = null;
|
||||||
|
protected string m_MarkerPath;
|
||||||
|
|
||||||
public void Initialise(IConfigSource config)
|
public void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
|
IConfig restartConfig = config.Configs["RestartModule"];
|
||||||
|
if (restartConfig != null)
|
||||||
|
{
|
||||||
|
m_MarkerPath = restartConfig.GetString("MarkerPath", String.Empty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
public void AddRegion(Scene scene)
|
||||||
{
|
{
|
||||||
|
if (m_MarkerPath != String.Empty)
|
||||||
|
File.Delete(Path.Combine(m_MarkerPath,
|
||||||
|
scene.RegionInfo.RegionID.ToString()));
|
||||||
|
|
||||||
m_Scene = scene;
|
m_Scene = scene;
|
||||||
scene.RegisterModuleInterface<IRestartModule>(this);
|
scene.RegisterModuleInterface<IRestartModule>(this);
|
||||||
MainConsole.Instance.Commands.AddCommand("RestartModule",
|
MainConsole.Instance.Commands.AddCommand("RestartModule",
|
||||||
|
@ -114,6 +126,7 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
|
|
||||||
if (alerts == null)
|
if (alerts == null)
|
||||||
{
|
{
|
||||||
|
CreateMarkerFile();
|
||||||
m_Scene.RestartNow();
|
m_Scene.RestartNow();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -127,6 +140,7 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
|
|
||||||
if (m_Alerts[0] == 0)
|
if (m_Alerts[0] == 0)
|
||||||
{
|
{
|
||||||
|
CreateMarkerFile();
|
||||||
m_Scene.RestartNow();
|
m_Scene.RestartNow();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -140,6 +154,7 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
{
|
{
|
||||||
if (m_Alerts.Count == 0 || m_Alerts[0] == 0)
|
if (m_Alerts.Count == 0 || m_Alerts[0] == 0)
|
||||||
{
|
{
|
||||||
|
CreateMarkerFile();
|
||||||
m_Scene.RestartNow();
|
m_Scene.RestartNow();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -259,5 +274,25 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
|
|
||||||
ScheduleRestart(UUID.Zero, args[3], times.ToArray(), notice);
|
ScheduleRestart(UUID.Zero, args[3], times.ToArray(), notice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void CreateMarkerFile()
|
||||||
|
{
|
||||||
|
if (m_MarkerPath == String.Empty)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string path = Path.Combine(m_MarkerPath, m_Scene.RegionInfo.RegionID.ToString());
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
|
||||||
|
FileStream fs = File.Create(path);
|
||||||
|
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
||||||
|
Byte[] buf = enc.GetBytes(pidstring);
|
||||||
|
fs.Write(buf, 0, buf.Length);
|
||||||
|
fs.Close();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue