Вопрос - Ответ

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

Re: Вопрос - Ответ

Postby Driverz » Wed, 05 Dec 2012, 08:27

VoidVolker wrote:либо блокировать пользовательский ввод
большое спасибо! так оно и надо было сделать.
подскажи, уважаемый, VoidVolker,почему ещё 2 задачи никак не отрабатывают:
1я задача - автоматический переход ББ в режим сна
Code: Select all
#( -=Усыпляем=-
NoLog
SingleInstance
\ если кто-то работал последние десять минут, не выключаем
Rule: IDLE: 600
Action:
WDay@ 6 < INTERVAL: 08:30-19:10 AND
WDay@ 6 = INTERVAL: 10:00-14:40 AND OR
IF EXIT THEN

CUR-DATE [ 2010 11 13 YMD>DATE ] LITERAL = INTERVAL: 08:30-19:10 AND IF EXIT THEN
CUR-DATE [ 2011 03 05 YMD>DATE ] LITERAL = INTERVAL: 08:30-19:10 AND IF EXIT THEN

\ здесь последняя попытка поймать выключение :-)
TQUERY: "Выключить компьютер?" 60 Yes
IF
\ блокируем сессию
 LockWorkStation DROP
 POWER-FORCE   
 POWER-SUSPEND
ELSE
THINT: "Отмена выключения" 30
THEN
)#

2-я задача - пробуждение ББ.
Code: Select all
#( -=Пробуждаем=-
TRUE VALUE found?
0 VALUE new_wake_date
WatchSuspend
Action:
CUR-DATE
CASE
    [ 2011 12 31 YMD>DATE ] LITERAL OF [ 2012 01 09 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ Н.Г.
    [ 2012 02 22 YMD>DATE ] LITERAL OF [ 2012 02 24 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ 23ф
\    [ 2012 03 04 YMD>DATE ] LITERAL OF [ 2012 03 05 YMD>DATE ] LITERAL TO new_wake_date ENDOF \
    [ 2012 03 07 YMD>DATE ] LITERAL OF [ 2012 03 11 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ 8 марта
    [ 2012 04 30 YMD>DATE ] LITERAL OF [ 2012 05 02 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ 1 мая
    [ 2012 05 08 YMD>DATE ] LITERAL OF [ 2012 05 10 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ 9 мая
    [ 2012 06 11 YMD>DATE ] LITERAL OF [ 2012 07 13 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ 12 июня
    [ 2012 11 03 YMD>DATE ] LITERAL OF [ 2012 11 06 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ 5 ноября
    DUP OF FALSE TO found? ENDOF   \ совпадение не найдено
ENDCASE
found?   \ выбираем схему настройки
IF
 new_wake_date DATE>YMD 08 30 WakeAtDate
ELSE
 WDay@ 5 <
 IF
  WakeAt: "08:30"
 ELSE
  WDay@ 5 =
  IF
   WakeAt: "10:00"
  ELSE
   WakeAtWd: "08:30" 1
  THEN
 THEN
THEN
ES_SYSTEM_REQUIRED ResetSuspendTimer
ES_DISPLAY_REQUIRED ResetSuspendTimer
ES_CONTINUOUS ResetSuspendTimer
)#
Driverz
 
Posts: 125
Joined: Fri, 06 Mar 2009, 13:06

Re: Вопрос - Ответ

Postby akv2003 » Wed, 05 Dec 2012, 11:26

Попытался сделать простую задачу, чтобы при присутствии процесса выводилось сообщение.
Вроде проще некуда. Сделал через GUI получилось
Code: Select all
Time: 14 12 * * * *
Rule: PROC-EXIST: "zzzzzzz.exe"
Action:
MSG: "Процесс запущен"

Но при попытке запустить эту задачу выводит окно "Процесс запущен", хотя процесс zzzzzzz.exe не существует.
О себе:
Code: Select all
nncron.exe v 1.91 Build 1083 21.03.2006
tm.exe v 1.91 Build 499 21.03.2006
Directory: C:\Program Files\nnCron
Windows XP (5.1.2600) Service Pack 3
shell32.dll 6.0.2900


Не подскажете в чём проблема?
akv2003
 
Posts: 1
Joined: Wed, 05 Dec 2012, 11:20

Re: Вопрос - Ответ

Postby VoidVolker » Wed, 05 Dec 2012, 12:53

Driverz wrote:[ 2010 11 13 YMD>DATE ] LITERAL

Зачем так? Выигрыш по скорости в несколько долей миллисекунды не будет заметен. А читабельность падает.
Code: Select all
2010 11 13 YMD>DATE


akv2003 wrote:Попытался сделать простую задачу, чтобы при присутствии процесса выводилось сообщение.Вроде проще некуда. Сделал через GUI получилось
Code: Select all
Time: 14 12 * * * *
Rule: PROC-EXIST: "zzzzzzz.exe"
Action:
MSG: "Процесс запущен"

Но при попытке запустить эту задачу выводит окно "Процесс запущен", хотя процесс zzzzzzz.exe не существует.

А задача через меню ннкрона запускалась? Все правильно, так и должно быть, т.к. при запуске задачи через меню условия игнорируются и запускается на выполнение код раздела Action: <...> )#.
Для кода следует использовать bb-тег Code.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Wed, 05 Dec 2012, 13:50

VoidVolker wrote:Moriturus, хмхм... Судя по всему, это особенность работы файловой системы(NTFS): она хранит время доступа в кэше и обновляет его примерно раз в час и при перезагрузке. Так что судя по всему проще всего и будет перебирать файлы.

Перебирать файлы тоже не получается Т_Т. Есть N папок, в которых непрерывно появляются новые файлы, и нужно проверять, во все ли папки пишется в данный момент. Если перебирать файлы не старше нескольких минут, то получается разное кол-во файлов, которое никак не соответствует N. Ну и как мы выяснили, NTFS кеширует атрибуты файлов, а как обновить неизвестно, хотя точно можно, например вот:
http://s40.radikal.ru/i089/1212/32/4b1e9ef4e0ba.png
С другой стороны, файл в который в данный момент пишется, как оказалось, можно открыть с помощью FOUND-FULLPATH R/W OPEN-FILE-SHARED 0=, т.е. так тоже не проверить.
Что ещё можно придумать попроще (без сохранения истории файлов)?
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby Driverz » Wed, 05 Dec 2012, 15:04

VoidVolker wrote:Зачем так? Выигрыш по скорости в несколько долей миллисекунды не будет заметен. А читабельность падает.
Code: Select all
2010 11 13 YMD>DATE
а как же реализовать тогда эти задачи? под WinXP SP3 обе задачи работали прекрасно, а под Win8 x64 - никак.
Driverz
 
Posts: 125
Joined: Fri, 06 Mar 2009, 13:06

Re: Вопрос - Ответ

Postby VoidVolker » Wed, 05 Dec 2012, 18:44

Driverz wrote:а как же реализовать тогда эти задачи?

Просто вычислять дату во время компиляции и делать из неё литерал нет никакой необходимости.
Driverz wrote:под WinXP SP3 обе задачи работали прекрасно, а под Win8 x64 - никак.

Нуу... Вполне возможно, что в восьмерке какие-то апи работают по-другому. Надо локализовать ошибку и выяснить причину её возникновения.

Moriturus wrote:Перебирать файлы тоже не получается Т_Т. Есть N папок, в которых непрерывно появляются новые файлы, и нужно проверять, во все ли папки пишется в данный момент. Если перебирать файлы не старше нескольких минут, то получается разное кол-во файлов, которое никак не соответствует N. Ну и как мы выяснили, NTFS кеширует атрибуты файлов, а как обновить неизвестно, хотя точно можно

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

Re: Вопрос - Ответ

Postby AlikasS » Thu, 06 Dec 2012, 00:41

Driverz wrote:...почему ещё 2 задачи никак не отрабатывают:
1я задача - автоматический переход ББ в режим сна
2-я задача - пробуждение ББ.

скорее всего причина такая же как и в win7
в настройках планов электропитания
в дополнительных параметрах
надо разрешить таймеры пробуждения
пробуждение под windows 7 x64
\ ----------------------------
VoidVolker wrote:
Driverz wrote:[ 2010 11 13 YMD>DATE ] LITERAL

Зачем так? Выигрыш по скорости в несколько долей миллисекунды не будет заметен. А читабельность падает.
Code: Select all
2010 11 13 YMD>DATE

не правда ваша, кроме скорости (к увеличению которой, вы, в некоторых задачах иногда заостряете внимание, если решение исходит от вас :) ),
что лучше (читабельнее) смотрится)?
Code: Select all
 [ 2011 12 31 YMD>DATE ] LITERAL OF [ 2012 01 09 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ Н.Г.

Code: Select all
 2011 12 31 YMD>DATE OF 2012 01 09 YMD>DATE TO new_wake_date ENDOF \ Н.Г.

где видно сразу кусок кода, который необходимо менять, при внесении новой даты?

;-)
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Вопрос - Ответ

Postby Driverz » Fri, 07 Dec 2012, 08:09

AlikasS wrote:надо разрешить таймеры пробуждения

пробовал выставлять таймеры пробуждения и в значение Включено и Выключено, результат один: не засыпает ББ.
по второй задаче (при ручном выключении/сне/гиберначии ББ) ББ пробуждается.
кнопки СОН на клавиатуре ББ уходит в гибернацию/сон прекрасно). может ещё будут какие-нибудь предположения?
Last edited by Driverz on Fri, 07 Dec 2012, 09:22, edited 2 times in total.
Driverz
 
Posts: 125
Joined: Fri, 06 Mar 2009, 13:06

Re: Вопрос - Ответ

Postby VoidVolker » Fri, 07 Dec 2012, 08:44

AlikasS wrote:
VoidVolker wrote:
Driverz wrote:[ 2010 11 13 YMD>DATE ] LITERAL

Зачем так? Выигрыш по скорости в несколько долей миллисекунды не будет заметен. А читабельность падает.
Code: Select all
2010 11 13 YMD>DATE

не правда ваша, кроме скорости (к увеличению которой, вы, в некоторых задачах иногда заостряете внимание, если решение исходит от вас :) ),
что лучше (читабельнее) смотрится)?
Code: Select all
 [ 2011 12 31 YMD>DATE ] LITERAL OF [ 2012 01 09 YMD>DATE ] LITERAL TO new_wake_date ENDOF \ Н.Г.

Code: Select all
 2011 12 31 YMD>DATE OF 2012 01 09 YMD>DATE TO new_wake_date ENDOF \ Н.Г.

где видно сразу кусок кода, который необходимо менять, при внесении новой даты?

;-)

Да? А мы вот так:
Code: Select all
2011 12 31 YMD>DATE 
  OF   2012 01 09 YMD>DATE   ENDOF

При этом TO new_wake_date легко выносится за пределы кейса. Структурированное программирование и оформление кода еще никто не отменял =)
Кроме того, можно придумать еще с десяток более читабельных способов "ввода" дат. Например сделать массив из двух дат.
Code: Select all
#( Задача_093807122012
NoActive
SingleInstance
0 VALUE new_wake_date
: Date, YMD>DATE , YMD>DATE , 2 CELLS + ;
CREATE Dates[] 0
  \ ----- Даты -----
  2012 01 09   2011 12 31   Date,
  2012 02 24   2012 02 22   Date,
  \ ----- ---- -----
  0 ,             \ На всякий случай отмечаем конец массива нулем
CONSTANT /Dates   \ Размер массива

Action:
0 TO new_wake_date
Dates[] /Dates + Dates[] DO
  I @ CUR-DATE = IF I CELL+ @ TO new_wake_date THEN
CELL +LOOP
new_wake_date IF MSG: "Сегодня праздник!"  ELSE MSG: "Сегодня нет праздника." THEN
)#

Еще можно вынести весь служебный код за пределы задачи и сделать что-то типа такого:
Code: Select all
#( Задача_094007122012
NoActive
SingleInstance
Dates: any_name
   2011 12 31   2012 01 09 
;Dates
Action:
any_name IsDate? IF
  <...>
ELSE
  <...>
THEN
)#

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

Re: Вопрос - Ответ

Postby Driverz » Fri, 07 Dec 2012, 09:24

VoidVolker wrote:Так то! 8)

суть не в определении дат. Уважаемый, VoidVolker, я эмпирическим путем установил, что если закоментировать
Code: Select all
\ Rule: IDLE: 600
, то ББ реально засыпает в положенное время!
моя ничего не понимайт.
Driverz
 
Posts: 125
Joined: Fri, 06 Mar 2009, 13:06

Re: Вопрос - Ответ

Postby VoidVolker » Fri, 07 Dec 2012, 13:36

Driverz wrote:суть не в определении дат. Уважаемый, VoidVolker, я эмпирическим путем установил, что если закоментировать

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

Re: Вопрос - Ответ

Postby serzh_ksv » Mon, 10 Dec 2012, 07:29

ask wrote:Вот задание, которое пингует:
Code: Select all
# # # # # # # # # # # # # # # # # #
#                                 #
# Автор: Andrey S. Kochetov (ASK) #
#                                 #
# # # # # # # # # # # # # # # # # #

<%
VARIABLE   PING_I
VARIABLE   PING_LET
VARIABLE   PING_BEEP

CREATE     PING_COUNT               15     ALLOT
CREATE     PING_INI                256     ALLOT
CREATE     PING_LOG                256     ALLOT
CREATE     PING_BEEP_ON_DISCONNECT  15     ALLOT
CREATE     PING_BEEP_ON_CONNECT     15     ALLOT
CREATE     PING_ADDR                64     ALLOT
CREATE     PING_OK                  15     ALLOT
\ CREATE     PING_SECTION             64     ALLOT
%>

#( PING_GET_PARAMS
NoLog
NoDel
RunOnce
Time: 41 16 18 10 * 2007
Action:

  S" %ModuleDirName%kinder_pinger.ini" EVAL-SUBST PING_INI PLACE
 
  FILE-EXIST: "%PING_INI COUNT%"
  IF
    PING_INI COUNT                      INI-FILENAME
   
    S" Main"                            INI-SECTION
    S" Количество устройств"            INI-GET-VALUE PING_COUNT                     PLACE
    S" Файл журнала"                    INI-GET-VALUE PING_LOG                       PLACE
  THEN
)#

#( PING_START
NoLog
NoDel
Time: START-TIME
Action:

  0 PING_LET !
  PING_GET_PARAMS RUN
 
  PING_COUNT COUNT S" " COMPARE 0= NOT PING_COUNT COUNT S" 0" COMPARE 0= NOT PING_COUNT COUNT S" default value" COMPARE 0= NOT AND AND
  IF
    0 PING_I !
 
    PING_COUNT COUNT S>NUM 0 DO
      PING_I @ 1 + PING_I !

      \ S" Устройство_%PING_I @%" EVAL-SUBST PING_SECTION PLACE
      \ PING_SECTION COUNT      INI-SECTION
      " Устройство_%PING_I @ N>S%"     INI-SECTION
     
      S" Адрес или имя"       INI-GET-VALUE PING_ADDR PLACE
      S" Связь есть"          INI-GET-VALUE PING_OK   PLACE
     
      PING_ADDR COUNT ADD-HOST
    LOOP
   
    1 PING_LET !
  THEN
)#

#( PING_MONITOR
NoLog
SingleInstance
Action:

  PING_LET @ 1 =
  IF
    PING_GET_PARAMS RUN
   
    \ 6 итерации цикла с паузой в 10 секунд
    6 0 DO
      PING_COUNT COUNT S" " COMPARE 0= NOT PING_COUNT COUNT S" 0" COMPARE 0= NOT PING_COUNT COUNT S" default value" COMPARE 0= NOT AND AND
      IF
        0 PING_I !
        0 PING_BEEP !
     
        PING_COUNT COUNT S>NUM 0 DO
          PING_I @ 1 + PING_I !
         
          \ S" Устройство_%PING_I @%" EVAL-SUBST PING_SECTION PLACE
          \ PING_SECTION COUNT                    INI-SECTION
          " Устройство_%PING_I @ N>S%"            INI-SECTION
         
          S" Адрес или имя"                     INI-GET-VALUE PING_ADDR                      PLACE
          S" Связь есть"                        INI-GET-VALUE PING_OK                        PLACE
          S" Звонок при отсутствии связи"       INI-GET-VALUE PING_BEEP_ON_DISCONNECT        PLACE
          S" Звонок при восстановлении связи"   INI-GET-VALUE PING_BEEP_ON_CONNECT           PLACE
         
          HOST-EXIST: "%PING_ADDR COUNT%"
          IF
            \ Связь восстановилась
            PING_OK COUNT S" Нет" COMPARE 0=
            IF
              S" Связь есть" S" Да" INI-SET-VALUE
              LOG: "%PING_LOG COUNT%" "%DD%.%MM%.%YYYY% %hh%:%mm%:%ss% связь с %PING_ADDR COUNT% восстановлена"
              1 BalloonIcon !
              BALLOON: "%PING_ADDR COUNT%" "связь восстановлена"
             
              PING_BEEP_ON_CONNECT COUNT S" Да" COMPARE 0=
              IF
                50 7000 BEEP
                50 7000 BEEP
                50 7000 BEEP
              THEN
            THEN
          ELSE
            \ Связь пропала
            PING_OK COUNT S" Да" COMPARE 0=
            IF
              S" Связь есть" S" Нет" INI-SET-VALUE
              LOG: "%PING_LOG COUNT%" "%DD%.%MM%.%YYYY% %hh%:%mm%:%ss% связь с %PING_ADDR COUNT% отсутствует"
              3 BalloonIcon !
              BALLOON: "%PING_ADDR COUNT%" "связь отсутствует"
             
              PING_BEEP_ON_DISCONNECT COUNT S" Да" COMPARE 0=
              IF
                PING_BEEP @ 0 =
                IF
                  1 PING_BEEP !
                 
                  Если_кто_то_кое_где_у_нас_порой LAUNCH
                THEN
              THEN
            THEN
          THEN
        LOOP
      THEN
    LOOP
  THEN
)#


А вот INI-шка для него, в которой прописаны пингуемые адреса:
Code: Select all
[Main]
Количество устройств=2
Файл журнала=C:\TEMP\kinder_pinger.log

[Устройство_1]
Адрес или имя=192.16.0.120
Звонок при отсутствии связи=Да
Звонок при восстановлении связи=Да
Связь есть=Да

[Устройство_2]
Адрес или имя=asksoft.net
Звонок при отсутствии связи=Нет
Звонок при восстановлении связи=Нет
Связь есть=Да


Отправку e-mail прикрутите сами с помощью BLAT.EXE


Был бы очень признателен, еслиб Вы расказали как этим воспользоваться, а то я попробывал в задания добавить не получается выдает ошибку.... И кронтаб-файл создавал результат тот же :(.... ошибка
serzh_ksv
 
Posts: 6
Joined: Thu, 10 Mar 2011, 12:38

Re: Вопрос - Ответ

Postby ask » Mon, 10 Dec 2012, 12:00

1. В nncron.ini должен быть подключен плагин "strings.spf"
2. Где-то должен быть скрипт, проигрывающий муз.сигнал:
Code: Select all
#( Если_кто_то_кое_где_у_нас_порой
NoLog
NoDel
SingleInstance
RunOnce
Time: 32 11 2 6 * 2008
Action:
SWHide   IdlePriority

  BEEP: 280 330    \ E
  PAUSE: 5
  BEEP: 105 330    \ E
  PAUSE: 100
 
  BEEP: 280 330    \ E
  PAUSE: 5
  BEEP: 105 330    \ E
 
  PAUSE: 70
 
  BEEP: 20 294     \ D
  PAUSE: 10
  BEEP: 290 349    \ F
  BEEP: 200 392    \ G
  PAUSE: 10
  BEEP: 280 440    \ A
  BEEP: 120 262    \ C
 
  PAUSE: 80
 
  BEEP: 320 349    \ F
  BEEP: 180 440    \ A
  BEEP: 500 392    \ G
  PAUSE: 1000
 
  PAUSE: 450
 
  BEEP: 280 330    \ E
  BEEP: 110 294    \ D
  PAUSE: 400
 
  PAUSE: 670
 
  BEEP: 20 247     \ B
  PAUSE: 10
  BEEP: 280 262    \ C
  BEEP: 110 247    \ B
  PAUSE: 80
  BEEP: 280 220    \ A
  BEEP: 110 330    \ E
)#


Если совсем лень это делать, можете скачать дистрибутив nnCron, в котором все эти скрипты есть: http://asksoft.net/Download/nnCron.exe
Вам понадобится только добавить адреса, которые нужно мониторить, в файл "C:\Program Files\nnCron\kinder_pinger.ini"
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: Вопрос - Ответ

Postby SeMa » Thu, 27 Dec 2012, 21:18

добрался до использования *.fex by VoidVolker ("поиском" форума (с чужого компа) не смог найти)
Столкнулся со случаем, когда во внешнем скрипте и в консоли работает, а в *.fex - нет.
Code: Select all
S" filename" FILE-WTIME <# S# #> TYPE

Указывает ошибку на позицию ПОСЛЕ FILE-WTIME.
Прошу помоши.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Вопрос - Ответ

Postby VoidVolker » Fri, 28 Dec 2012, 07:47

О, а я и забыл, что делал что-то такое (=
На сколько я помню, для каждого скрипта запускается отдельный процесс крона — так что печатать-то некуда.
И еще, наверно должно было быть так:
Code: Select all
S" filename" FILE-WTIME <# #S #> TYPE
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests

cron