Como bien dice roman cuando termina el evento OnExecute también termina el servicio. Así que tienes 2 posibilidades, crear un bucle:
Código Delphi
[-]
procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Windows.Beep(500,100);
Sleep(1000);
ServiceThread.ProcessRequests(FALSE);
end;
end;
La otra opción es no usar el método execute para nada. Es decir activar el timer en el evento OnStart y hacer lo que quieras en el evento del timer. Es muy importante no utilizar el evento OnExecute, sino volveremos a la situación anterior:
Código Delphi
[-]
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Timer1.Enabled:= TRUE;
end;
procedure TService1.Timer1Timer(Sender: TObject);
begin
Windows.Beep(500,100);
end;