[fpc-pascal] Daemon doesn't work right at boottime.

A.J. Venter aj at getopenlab.com
Thu Jun 1 23:04:27 CEST 2006


> > Any idea where I should start looking ?
>
> Just a shot into the dark: maybe you start yout deamon, before your
> local timezone is set up?
>
> Does it change anything, when you move your bootscript to a higher
> position in rc.x, e.g. make it S99whatever?
Good theory, but my daemon is very nearly the last bootscript to run, quite a 
long while after this system at least has set up the local timezone, ran 
ntpdate once and then started ntpd.

The log on a normal run shows each plugin getting run on zero, then again on 
whatever their interval dictates - but from bootup the only thing that shows 
up in the log are the tick's

Here are the critical parts of the source:

<snip>
Procedure ReadPlugins;
Var Plugins, ThisPlugin : TstringList;
            I,J : Integer;
	CMD,Min : String;
Begin
Writeln('Woled started');
Assign(fLog,logname);
Append(Flog);
Writeln(Flog,'Woled started');
Actions := TStringList.Create;
ThisPLugin := TstringList.Create;
GetDirList('/etc/wole/plugins/*',Plugins);
If Plugins.Count = 0 then
Begin
	Writeln(Flog,'No plugins configured, exciting');
	close(Flog);
	halt;
end;
For I := 0 to Plugins.Count -1 do
Begin
   ThisPlugin.Clear;
   ThisPlugin.LoadFromFile('/etc/wole/plugins/'+Plugins[I]);
   for J := 0 to ThisPlugin.Count -1 do
   Begin
	If pos('ACTION=',uppercase(ThisPlugin[J])) <> 0 then
	begin
	 CMD:=Copy(ThisPlugin[J],pos('=',ThisPlugin[J])+1,length(ThisPlugin[J]));
	end; 
	If pos('INTERVAL=',uppercase(ThisPlugin[J])) <> 0 then
	begin
	 Min:=Copy(ThisPlugin[J],pos('=',ThisPlugin[J])+1,length(ThisPlugin[J]));
	end;
   end;
   If (Length(Min) <> 0) And (Length(CMD) <> 0) then
   begin
	Actions.Add(min+'='+cmd);
   end else
   Begin
	Writeln(Flog,'Could not read ',Plugins[I],' format error.');
   end;
end;
Close(FloG);
ThisPlugin.Free;
Plugins.Free;
Writeln('Handling ',actions.count,' plugins');
end;

<snip>
begin{MAIN}
<snip>
 {Inside the fork}
   Repeat
      If bHup Then Begin
         {$I-}
         Close(fLog);
         {$I+}
         IOResult;
         NewLog;
         bHup := false;
      End;
      {----------------------}
      Assign(Flog,Logname);
      Append(Flog);
	
      Writeln (Flog,'Tick - ',minutes,' minutes');	
      For PCount := 0 to Actions.Count -1 do
      Begin
	Mint := StrToInt(Copy(Actions[Pcount],1,pos('=',Actions[Pcount]) -1));
	If Minutes mod Mint = 0 then 
	Begin
	Writeln(Flog,'Executing plugin action:');
	
Writeln(Flog,'	',copy(Actions[Pcount],pos('=',Actions[Pcount])+1,length(Actions[Pcount])));
	
shell(copy(Actions[Pcount],pos('=',Actions[Pcount])+1,length(Actions[Pcount]))); 
	Writeln(Flog,'Action completed, resuming counter');
	end;
      end;
      Close(fLog);
      If bTerm Then
         BREAK
      Else
         { wait a while }
         fpSelect(0,nil,nil,nil,60000);
	 inc(Minutes);
   Until bTerm;
   Actions.Free;


-- 
"there's nothing as inspirational for a hacker as a cat obscuring a bug 
by sitting in front of the monitor" - Boudewijn Rempt
A.J. Venter
Chief Software Architect
OpenLab International
www.getopenlab.com
www.silentcoder.co.za
+27 82 726 5103



More information about the fpc-pascal mailing list