Watchdog

From Second Life Wiki
Revision as of 03:30, 17 January 2012 by Tika Oberueng (talk | contribs)
Jump to navigation Jump to search

LSL WATCHDOG

These are some simple scripts that watch other scripts in the same prim and restarts them if they crash.

BASIC LSL WATCHDOG FOR A SINGLE PRIMARY SCRIPT <lsl> // Basic LSL Watchdog Script to watch a single script // 2012-01-17 By Tika Oberueng // Released to the public domain. // You break it, you get to keep both pieces. // string watchee = "Test"; // Set this to the name of a script in prim inventory to watch float interval = 10.0; // Number of seconds between watchdog checks. Probably best to keep this above >= 10

default {

   state_entry() {
       llSetTimerEvent(interval);
   }
   timer() {
       llSetTimerEvent(0);
       if (!llGetScriptState(watchee)) {
           llResetOtherScript(watchee);
           llSetScriptState(watchee, TRUE);
           llRegionSay(DEBUG_CHANNEL, "Watchdog Trip: The script ["+watchee+"] has crashed and has been restarted.");
           llSleep(1);
           llResetScript(); // Reset this script as well as a preventative measure
       }
       llSetTimerEvent(interval);
   }

} </lsl>

BASIC LSL WATCHDOG FOR MULTIPLE SCRIPTS <lsl> // Basic LSL Watchdog Script to watch multiple scripts // 2012-01-17 By Tika Oberueng // Released to the public domain. // You break it, you get to keep both pieces. // // Basic LSL Watchdog Script to watch multiple scripts // 2012-01-17 By Tika Oberueng // Released to the public domain. // You break it, you get to keep both pieces. // float interval = 10.0; // Number of seconds between watchdog checks. Probably best to keep this above >= 10

default {

   state_entry() {
       llSetTimerEvent(interval);
   }
   timer() {
       integer loop;
       string watchee;
       llSetTimerEvent(0);
       for (loop = llGetInventoryNumber(INVENTORY_SCRIPT) -1; loop > -1; --loop) {
           watchee = llGetInventoryName(INVENTORY_SCRIPT,loop);
           if (!llGetScriptState(watchee)) {
               if (watchee != llGetScriptName()) {
                   llResetOtherScript(watchee);
                   llSetScriptState(watchee, TRUE);
                   llRegionSay(DEBUG_CHANNEL, "Multiple Watchdog Trip: The script ["+watchee+"] has crashed and has been restarted.");
                   llSleep(1);
                   llResetScript(); // Reset this script as well as a preventative measure
               }
           }
       }
       llSetTimerEvent(interval);
   }

} </lsl>