перезапуск терминала по времени

 

Всем привет.

Вообщем пару недель подряд наблюдаю такую картину. Роботы которые писал Х месяцев назад торгуют нормально первые Х часов (или минут), а потом останавливаются. Проблему решает или перезапуск робота, или в крайнем случае перезапуск всего терминала. Могу конечно прогу набросать чтобы автоматически перезапускала теримналы по таймеру, но может есть уже готовое решение?

 
А лог при входе в start() вести пытались?
А если параллельно запустить эксперт без начинки (голый start() с логом)- что из этого выйдет?
А если логгировать все типа "собираюсь выполнить calculateLot()"- на какой функции все виснет?
 

Если мерзнут котиры, есть прожка, следит за логами и ребутит терминал, если тики не поступают Х сек/мин.

Соответственно можно и на зависании эксперта тоже самое сделать. Но если он виснет, то правильнее конечно будет разобраться в причине, а не лечить следствие.

 
А перезапуск робота как котирам помогает?
 
jartmailru:
А перезапуск робота как котирам помогает?
Не робота - терминала. Больше ничего не помогает.
 
Вообщем пишу прога которая по таймеру перзапускает все терминалы путь к которым проипсан в конфиге у проги. Пока это самый изящный путь.
 
trinitron:
Вообщем пишу прога которая по таймеру перзапускает все терминалы путь к которым проипсан в конфиге у проги. Пока это самый изящный путь.
А почему по таймеру? Или виснет строго периодично?
 

Перезапуск системы каждые четыре часа. Терминал прописывать в "Run" файла реестра (regedit).

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MPre: Word;

implementation

{$R *.dfm}

procedure RebootSystem(Flags: UINT);
var
  handle_: THandle;
  n: DWORD;
  luid: TLargeInteger;
  priv: TOKEN_PRIVILEGES;
  ver: TOSVERSIONINFO;
begin
  ver.dwOSVersionInfoSize := Sizeof(ver);
  GetVersionEx(ver);
  if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
  begin
    if OpenProcessToken(GetCurrentProcess,
       TOKEN_ADJUST_PRIVILEGES, handle_) then
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
      begin
        priv.PrivilegeCount := 1;
        priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        priv.Privileges[0].Luid := luid;
        AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
      end
  end;
  if not ExitWindowsEx(Flags,1) then Form1.Caption := 'Ошибка';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  tm: TDateTime;
  Hour, Min, Sec, MSec: Word;
begin
  tm := GetTime;
  DecodeTime(tm, Hour, Min, Sec, MSec);
  if (Min <> MPre) then
  begin
    if (MPre = 0) then
    begin
      if (((Hour + 2) mod 4) = 0)
      then RebootSystem(EWX_REBOOT);
    end;
    MPre := Min;
    Caption := IntToStr(MPre);
  end;
  //Caption := IntToStr(Hour)+':'+IntToStr(Min)+':'+IntToStr(Sec);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Button1.Caption = 'Run') then Timer1.Enabled := true
  else                              Timer1.Enabled := false;
  if (Timer1.Enabled) then Button1.Caption := 'Stop'
  else                     Button1.Caption := 'Run';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MPre := 65535;
end;

end.
 

Спасибо, протестирую исходник.

Уже написал на делфи, свою прогу котора перезапускает список программ по времени.

 
кстати крик души гляньте плиз мой топик по подсчету профита по валютным парам. Ошибки в упор не вижу а считается все крыво
http://forum.mql4.com/ru/44099
 
trinitron:
Вообщем пишу прога которая по таймеру перзапускает все терминалы путь к которым проипсан в конфиге у проги. Пока это самый изящный путь.

Ось какая?

В Висте/7ке планировщик заданий весьма продвинутый (будильником у меня работает).

Или XStarter в помощь.

Причина обращения: