Nur vorweg:
Ich habe ab und an Probleme, das ein IRQ mir den Rechner (CPU) belegt. Habe auch nach Monaten nicht rausfinden können, welcher Treiber dies alle paar Tage und Wochen mal macht. Daher starte ich dann automatisch neu, aber nur nachts, hat also nur indirekt mit IPS zu tun.
Also hier mal ganz simpel der Serverneustart.
Das bekannt Script um die CPU-Last auszuwerten (trigger bei mir alle 60s.)
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$cpuInfo = Sys_GetCPUInfo();
for ($i = 0; $i < count($cpuInfo) - 1; $i++)
{
SetValueInteger(CreateVariableByName($parentID, 'CPU '.$i, 1, '~Valve'), $cpuInfo['CPU_'.$i]);
}
SetValueInteger(CreateVariableByName($parentID, 'durchschnittliche Last', 1, '~Valve'), $cpuInfo['CPU_AVG']);
IPS_SetScriptTimer($IPS_SELF, 1*60);
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
Und hiermit werte ich dann aus, ob es eine dauerhafte Belegung einer CPU gibt. Die beiden Scripte kann man auch gut zusammen führen oder um die Speicherbelastung erweitern. Trigger 1x Std., Serverneustart bei Bedarf zwischen 3 u. 4 Uhr.
// Wenn 5 Stunden > 90% dann Neustart zwischen 3 und 4 Uhr nachts.
// Trigger stündlich
$CPU0 = GetValueInteger(25701 /*[Programme\IPS_Rechner\CPU\CPU 0]*/ );
$CPU1 = GetValueInteger(18837 /*[Programme\IPS_Rechner\CPU\CPU 1]*/ );
if (($CPU0 > 90) or ($CPU1 > 90)) {
SetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/, (GetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/) + 1));
} else {
SetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/, 0);
}
if ((date("H") == 03) and (GetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/) >= 5)){
SetValueInteger(23735 /*[Programme\IPS_Rechner\Auto_Server_Restart\Auto_Server_Restart_counter]*/, 0);
SetValueString(51916 /*[Programme\Sound\Speak SK1\Speak\Speak]*/ , "Das System wird in 30 Sekunden neu gestartet!");
IPS_Execute("shutdown", "/r", false, false);
}
Vllt. kann’s wer gebrauchen.
Viele Grüße,
Doc