Перечитывание кронтаба при появлении в логе ошибки

Обсуждение программ nnCron и nnCron LITE

Перечитывание кронтаба при появлении в логе ошибки

Postby Morituruz » Mon, 09 Jun 2014, 14:23

Перечитывание кронтаба в случае обнаружения в логе внутренней ошибки.
Code: Select all
#( Internal_error_guard
\ 20:26 08.06.2014
HyperActive
NoLog SingleInstance
\ log format from nncron.ini:
Rule: cron.log EVAL-SUBST EXIST? ;
WINAPI: SetFileTime kernel32.dll
fVAR ieg_last_time
CREATE ieg_string 256 ALLOT
2VARIABLE ieg_new_time
: ieg_reload_crontab { \ crontab_file -- }
\ setting last write time to crontab file
DEF-CRONTAB-FILENAME R/W OPEN-FILE-SHARED THROW TO crontab_file
FT-CUR SWAP ieg_new_time 2!
ieg_new_time 0 0 crontab_file SetFileTime 0=
IF
   S" Crontab date modification error: %GetLastError WinErrorMessage% (%GetLastError N>S%)" EVAL-SUBST HINT
THEN
crontab_file CLOSE-FILE DROP
;
Action:
S" "
\ ### SETTINGS ###
cron.log EVAL-SUBST FILE S" /(^|\n)(.+?)(internal\serror)|(Внутренняя\sошибка)/i" RE-ALL
\ ################
   2DROP   \ drop previous find
   $2   \ put group on stack
;RE-ALL
?DUP
IF   \ we found something
   ieg_string PLACE
   cron.log EVAL-SUBST ONLYNAME S"  " S+ ieg_string COUNT S+   \ create a string with cron logfile name and found time
   2DUP
   ieg_last_time COMPARE 0<>   \ compare string from stack with saved string
   IF   \ strings differs
      TO ieg_last_time
      S" %TIME_STRING% nnCron error detected" EVAL-SUBST 2DUP CRON-LOG
      CRLF S+ ieg_string COUNT S+ HINT
      ieg_reload_crontab
   ELSE
      2DROP
   THEN
ELSE
   DROP
THEN
)#
Last edited by Morituruz on Fri, 20 Jun 2014, 09:03, edited 2 times in total.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby AlikasS » Thu, 19 Jun 2014, 02:11

неплохо старому логу сделать FRENAME
что бы задача после перечитывания , следила бы уже за новым чистым логом
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Morituruz » Thu, 19 Jun 2014, 09:55

AlikasS wrote:неплохо старому логу сделать FRENAME

Тогда это будет совершенно другая задача :) Лично мне не хочется плодить лог-файлы, поэтому я и сделал поиск и сохранение ошибок.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Headcrab » Fri, 20 Jun 2014, 08:50

Internal_error_guard: Синтаксическая ошибка в кронтабе!!!
CRONTAB LOADING. В стеке мусор (16)

Ругается на строку
CRLF S+ ieg_string COUNT S+ 1 SHINT
Headcrab
 
Posts: 19
Joined: Fri, 21 Feb 2014, 14:05

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Morituruz » Fri, 20 Jun 2014, 09:03

Спасибо, пост поправил.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Morituruz » Sat, 20 Jun 2015, 20:03

На семёрочке x64 забодала внутренняя ошибка в самой задаче для слежения за внутренними ошибками. Появляется без какой-либо системы и периодичности.
Навтыкал вывод в консоль:
Code: Select all
#( Internal_error_guard
\ 20:26 08.06.2014
HyperActive
NoLog SingleInstance
\ log format from nncron.ini:
Rule: cron.log EVAL-SUBST EXIST? ;
WINAPI: SetFileTime kernel32.dll
fVAR ieg_last_time
CREATE ieg_string 256 ALLOT
2VARIABLE ieg_new_time
: ieg_reload_crontab { \ crontab_file -- }
\ setting last write time to crontab file
DEF-CRONTAB-FILENAME R/W OPEN-FILE-SHARED THROW TO crontab_file
FT-CUR SWAP ieg_new_time 2!
ieg_new_time 0 0 crontab_file SetFileTime 0=
IF
   S" Crontab date modification error: %GetLastError WinErrorMessage% (%GetLastError N>S%)" important_error
THEN
crontab_file CLOSE-FILE DROP
;
Action:
30000 PAUSE
                                       TIME_STRING S"  INTERNAL STEP 0" S+ TYPE CR
S" " ieg_string PLACE
\ ### SETTINGS ###
cron.log EVAL-SUBST FILE S" /(^|\n)(.+?)(internal\serror)/i" RE-ALL
\ ################
   $2   ieg_string PLACE \ save what we find
;RE-ALL
ieg_string COUNT NIP
                                       TIME_STRING S"  INTERNAL STEP 1" S+ TYPE CR
IF      \ we found something
                                       TIME_STRING S"  INTERNAL STEP 2" S+ TYPE CR
   cron.log EVAL-SUBST ONLYNAME S"  " S+ ieg_string COUNT S+   \ create a string with cron logfile name and found time
   2DUP
                                       TIME_STRING S"  INTERNAL STEP 3" S+ TYPE CR
   ieg_last_time COMPARE 0<>   \ compare string from stack with saved string
   IF   \ strings differs
      TO ieg_last_time
      S" %TIME_STRING% nnCron error detected" EVAL-SUBST 2DUP CRON-LOG
                                       TIME_STRING S"  INTERNAL STEP 4" S+ TYPE CR
      CRLF S+ ieg_string COUNT S+ 1 SHINT
      ieg_reload_crontab
   ELSE
      2DROP
   THEN
                                       TIME_STRING S"  INTERNAL STEP 5" S+ TYPE CR
THEN
                                       TIME_STRING S"  INTERNAL STEP 6" S+ TYPE CR
)#


Ошибка вылазит почему-то после 6 шага:
Code: Select all
2015.06.20_20-58-30 INTERNAL STEP 0
2015.06.20_20-58-30 INTERNAL STEP 1
2015.06.20_20-58-30 INTERNAL STEP 2
2015.06.20_20-58-30 INTERNAL STEP 3
2015.06.20_20-58-30 INTERNAL STEP 5
2015.06.20_20-58-30 INTERNAL STEP 6
EXCEPTION!  CODE:C0000005  ADDRESS:4B2298  WORD:@  REGISTERS:
1C73ED04   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
1C73ED14   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
1C73ED24   CF 2B 20 01  2B 00 00 00  53 00 00 00  2B 00 00 00 ╧+ .+...S...+...
USER DATA: 1C3C004C HANDLER: 1C73EF94 RETURN STACK:
0 :  4 :  8 :  C :  10 :  14 :  18 :  1C :  20 :  24 :  28 :  2C :  30 :  34 :  38 :  3C :  40 :  44
 :  48 :  4C :  50 :  54 :  58 :  5C :  60 :
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby VoidVolker » Sat, 20 Jun 2015, 23:48

Code: Select all
cron.log EVAL-SUBST FILE S" /(^|\n)(.+?)(internal\serror)/i" RE-ALL
\ ################
   $2   ieg_string PLACE \ save what we find
;RE-ALL

Цикл же - результатом будет последнее найденное совпадение.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Morituruz » Sun, 21 Jun 2015, 00:02

Я вас не понял. Этот цикл до семёрочки нормально работал.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Headcrab » Fri, 28 Aug 2015, 10:54

Время от времени и у меня возникает данная ошибка правда на Windows Server 2008 x32.
Помогает ваш скрипт перезапуска задач с ошибками, хотя один раз случилось такое, что завис он сам :)
Решил созданием второго задания с тем же скриптом, сейчас мониторят друг друга.
Headcrab
 
Posts: 19
Joined: Fri, 21 Feb 2014, 14:05

Re: Перечитывание кронтаба при появлении в логе ошибки

Postby Morituruz » Fri, 28 Aug 2015, 11:02

Headcrab wrote:мониторят друг друга.

Костыль следит за костылём, хе-хе.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests