powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ещё вопрос по gbak
17 сообщений из 17, страница 1 из 1
Ещё вопрос по gbak
    #39256320
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет

Такой вопрос: а вот этот самый gbak вертает какое-то значение по окончании своей работы? Ну, типа 0 - успешно, не 0 - неуспешно, или что-то подобное? Чтобы можно было, запустив его из своей проги по ShellExecute, опеределить статус и результат его работы
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256340
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_p_nЧтобы можно было, запустив его из своей проги по ShellExecute, опеределить статус и результат его работы

не по ShellExecute, а нужно получить лог работы GBAK.
это можно сделать через:
1) ServiceAPI и компонент TIBBackupService
2) через captured запуск внешнего приложения GBAK

код на Delphi7, для уникодной Delphi - НУЖНО ПЕРЕРАБОТАТЬ!!!111адыныдын


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
type
  _STARTUPINFOA = record
    cb             :LongWord;
    lpReserved     :Longword; // Pointer;
    lpDesktop      :Longword; // Pointer;
    lpTitle        :Longword; // Pointer;
    dwX            :LongWord;
    dwY            :LongWord;
    dwXSize        :LongWord;
    dwYSize        :LongWord;
    dwXCountChars  :LongWord;
    dwYCountChars  :LongWord;
    dwFillAttribute:LongWord;
    dwFlags        :LongWord;
    wShowWindow    :Word;
    cbReserved2    :Word;
    lpReserved2    :LongWord; // Pointer;
    hStdInput      :THandle;
    hStdOutput     :THandle;
    hStdError      :THandle;
  end;
  TStartupInfo = _STARTUPINFOA;

  _PROCESS_INFORMATION = record
    hProcess       :THandle;
    hThread        :THandle;
    dwProcessId    :LongWord;
    dwThreadId     :LongWord;
  end;
  TProcessInformation = _PROCESS_INFORMATION;
  
  _SECURITY_ATTRIBUTES = record
    nLength             :LongWord;
    lpSecurityDescriptor:LongWord; // Pointer;
    bInheritHandle      :LongBool;
  end;
  TSecurityAttributes = _SECURITY_ATTRIBUTES;
  
  
  function RunCaptured(const aDirectory, aExeName, aCmdLine:string):string;
  var
    StartInf    :TStartupInfo; 
    ProcInf     :TProcessInformation; 
    SecAttr     :TSecurityAttributes; 
    TmpSA1      :TSecurityAttributes; 
    TmpName     :string; 
    TmpHndl     :THandle; 
    TmpRslt     :Cardinal;
    ProcCreated :LongBool; 
    TmpSL       :TStrings;
  begin
    Result    := 'FAILURE';
    TmpName   := 'log.txt'; // здесь идет получение имени временного файла. 
    SecAttr.nLength        := SizeOf(SecAttr); 
    SecAttr.bInheritHandle := True; 
    TmpHndl := CreateFile(PChar(TmpName), GENERIC_WRITE, FILE_SHARE_WRITE, SecAttr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
      try
        StartInf.cb          := SizeOf(StartInf); 
        StartInf.hStdOutput  := TmpHndl; 
        StartInf.dwFlags     := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; 
        StartInf.wShowWindow := SW_HIDE;
        ProcCreated          := true;
        ProcCreated := CreateProcess(PChar(aExeName), PChar(aExeName+' '+aCmdLine), TmpSA1, TmpSA1, ProcCreated,0,0,PChar(aDirectory),StartInf,ProcInf);
        if(Integer(ProcCreated) = 1)then 
        begin 
          SetPriorityClass   (ProcInf.hProcess,IDLE_PRIORITY_CLASS); 
          WaitForSingleObject(ProcInf.hProcess,INFINITE); 
          GetExitCodeProcess (ProcInf.hProcess,TmpRslt); 
          CloseHandle(ProcInf.hThread); 
          CloseHandle(ProcInf.hProcess); 
          CloseHandle(TmpHndl);
          TmpSL := TStringList.Create;
          try
            TmpSL.LoadFromFile(TmpName);
            Result := TmpSL.Text;
          finally 
            TmpSL.Free;   
            DeleteFile(PChar(TmpName)); 
          end;
        end 
        else 
          Result := 'Ошибка вызова внешнего приложения';
     finally
      CloseHandle(TmpHndl); 
      DeleteFile(PChar(TmpName)); 
     end; 
  end;  




в любом случае, мы получаем лог работы gbak в виде текста.
в этом тексте мы ищем подстроку "COMMITING, FINISHING AND GOING HOME". ну, или как-то так, посомтрите лог Вашего GBAK.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256341
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_p_nНу, типа 0 - успешно, не 0 - неуспешноВсё так и есть! 0 - успешно, 1 - с ошибкой, детализация ошибки падает в firebird.log
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256342
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devalex_p_nНу, типа 0 - успешно, не 0 - неуспешноВсё так и есть! 0 - успешно, 1 - с ошибкой, детализация ошибки падает в firebird.log

да ладно!
а если сервер находится где-то в "кукурудзяндии" и backup делается удалённо через ServiceAPI ? =)
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256346
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_p_n, по воводу автоматизации r/b кто-то замутил на хабре статью: https://habrahabr.ru/post/158575/
Есть еще ключик -VERIFY, который заставляет сплёвывать информацию о текущем действии gbak и позволяет неленивому замутить анализ вывода gbak внутри скрипта командной оболочки.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256349
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Rdb Dev!
You wrote on 15 июня 2016 г. 14:00:08:

Rdb Dev> по воводу автоматизации r/b кто-то замутил на хабре статью...
взрослые люди по хабрам не шастают!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256357
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийвзрослые люди по хабрам не шастают!
Я не гордый и без понтов, мне можно.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256377
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за ответы
Пошёл инфу пережёвывать :)
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256379
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP,
А твой код под Ембаркадеро 2010 будет работать?
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256385
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devдетализация ошибки падает в firebird.log
gbak никогда не пишет в firebird.log. Он либо выводит на экран, либо в файл -y filename.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256387
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvrdb_devдетализация ошибки падает в firebird.log
gbak никогда не пишет в firebird.log. Он либо выводит на экран, либо в файл -y filename.
Не-не, таки пишет. Я проверял вчера.
И gbak, и gfix
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256404
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_p_nНе-не, таки пишет. Я проверял вчера.
что проверял? gfix - пишет в firebird.log. gbak - нет. Не путай.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256410
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_p_nА твой код под Ембаркадеро 2010 будет работать?

конечно НЕТ!
читать про уникод.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256413
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvgbak никогда не пишет в firebird.log Так написано у Хелен.
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256425
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devТак написано у Хелен.
где именно написано?

Глава 39,
Возвращаемые коды и ответная реакция
" Копирование базы данных, выполняемое под Windows, возвращает код 0 при успешном завершении и 1 при ошибках. Если встретилась ошибка, посмотрите файл firebird.log. "

Вот это, что-ли?

- в firebird.log пишет только сервер. Валидация gfix-ом, собственно, выполняется тоже сервером.
- gbak - это простая программа, которой firebird.log по барабану
- gbak может находиться на другом компе. В какой еще firebird.log он будет что писать?
- у Хелен сказано - "при ошибках". Она имела в виду повреждения БД, о которых при чтении данных СЕРВЕР сообщит в firebird.log.
При этом никакой вывод ошибок gbak не будет записан в firebird.log, даже если бэкап-рестор вызывается через services api.

p.s. нашли кому лапшу вешать :-)
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256428
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv- в firebird.log пишет только сервер.И клиент
...
Рейтинг: 0 / 0
Ещё вопрос по gbak
    #39256432
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Hvlad!
You wrote on 15 июня 2016 г. 15:39:58:

Hvlad> И клиенту себя

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ещё вопрос по gbak
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]