Как исключить папку сразу в строке "WatchDir"

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

Как исключить папку сразу в строке "WatchDir"

Postby samarian » Sat, 14 Jan 2017, 20:04

Здравствуйте, я не привык к этому "языку" (использовал xstarter, но он сильно багнутый в выполнении задач, хотя я его выполения терпел почти 2 года))),
в общем, честно полазил денёк в поисках решения простой задачи:

1. мониторинг D:\YandexDisk WatchSubtree
2. не учитывать папку D:\YandexDisk\.sync
3. запустить программу после замеченных изменений свойств папок/файлов

в общем, все работает, кроме 2 пункта
последнее мое "достижение":

Code: Select all
#( YANDEXDISK
SingleInstance
WatchDir: "D:\YandexDisk" WatchSubtree
Rule: PROC-EXIST: "YandexDisk.exe" NOT
Action:
StartIn: "C:\Program Files\Yandex\YandexDisk\bin"
ShowNormal   RealtimePriority
START-APP: C:\Program Files\Yandex\YandexDisk\bin\YandexDisk.exe -desktop
PAUSE: 30000
BEGIN
DIR-EMPTY: "D:\YandexDisk\.sync\tmp" NOT
IF
PAUSE: 60000
THEN
DIR-EMPTY: "D:\YandexDisk\.sync\tmp"
UNTIL
KILL: "YandexDisk.exe"
PAUSE: 3000
)#


------
Я пока разбирался с другими проблемами в этой задаче.
Уже понял, как исключить папку .sync, но не понял, как можно это сделать именно в строке "WatchDir: "D:\YandexDisk" WatchSubtree".
Хотелось бы именно в этой строке, чтобы задача не начиналась запускаться 1000+ раз ( в папке, которую я хочу исключить, происходят изменения (изменения файлов в этой папке) каждую секунду во время работы запускаемого приложения "YandexDisk.exe").
samarian
 
Posts: 4
Joined: Sat, 14 Jan 2017, 19:56

Re: Как исключить папку сразу в строке "WatchDir"

Postby dothen » Tue, 17 Jan 2017, 16:31

Изменения в папке .sync делает приложение YandexDisk.
Если YandexDisk не запущен то папка .sync не будет изменяться.
Если YandexDisk запущен то Rule: не запустит задачу.
Значит исключать .sync не надо.

Code: Select all
#( YANDEXDISK
SingleInstance \ На случай если YandexDisk будет долго запускаться.
WatchDir: "f:\YandexDisk"
Rule: PROC-EXIST: "yandexdisk*" NOT
Action:
    StartIn: "C:\Program Files\Yandex\YandexDisk\bin"
    ShowNormal   RealtimePriority
    START-APP: C:\Program Files\Yandex\YandexDisk\bin\YandexDisk.exe -desktop

    20 2000 BEEP \ Если не пикает значит Rule: дало FALSE и значит Яндекс Диск уже работает.
)#

dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Как исключить папку сразу в строке "WatchDir"

Postby samarian » Tue, 17 Jan 2017, 18:00

ну, просто логи не создаются, но задача же все равно запускается?:

Code: Select all
SingleInstance
WatchDir: "D:\YandexDisk\" WatchSubtree
Rule: PROC-EXIST: "YandexDisk.exe" NOT
Action:
PAUSE: 8000
RECURSIVE
RECENT-FILE-WTIME: "D:\YandexDisk\*"
RE-MATCH: "%1 esPICKS%" "/.sync/i"
IF
EXIT
THEN
StartIn: "C:\Program Files\Yandex\YandexDisk\bin"
ShowNormal RealtimePriority
START-APP: C:\Program Files\Yandex\YandexDisk\bin\YandexDisk.exe -desktop
PAUSE: 22000
BEGIN
DIR-EMPTY: "D:\YandexDisk\.sync\tmp" NOT
IF
PAUSE: 60000
THEN
DIR-EMPTY: "D:\YandexDisk\.sync\tmp"
UNTIL
KILL: "YandexDisk.exe"
PAUSE: 3000


P.S. главное приемущество крона по сравнению с иксстартером - нет ложных срабатываний при мониторинге файловой системы,
как и игнорирования изменений в файловой системе. Ну и грузит меньше в разы систему)) (и еще я говорю и пишу почти также глупо - "обратный польский")))

Там обновлялка с таким же корнем запускается иногда
"Rule: PROC-EXIST: "yandexdisk*" NOT"

И ещё странность заметил в "программе": ~ ничего не меняешь, а задача все-таки фиксится сама собою.
И ещё: программа перечитывает весь кронтаб-файл периодически и, если задача, которая должна деактивироваться/активироваться из другой задачи, расположенной выше по списку, то программа выдает ошибку и вырубает эту задачу из списка ~рабочих (мне пришлось клон создать задачи, чтобы читалась, но из-за этого конечно иногда деактивировался/активровался клон))) В итоге я забил на такое решение проблемы.
samarian
 
Posts: 4
Joined: Sat, 14 Jan 2017, 19:56

Re: Как исключить папку сразу в строке "WatchDir"

Postby dothen » Tue, 17 Jan 2017, 20:06

Можно делать так:
Code: Select all
#( YANDEXDISK2
\ http://www.nncron.ru/forums/viewtopic.php?f=5&t=13270#p35912
: HappyWatchDir ( -- a u ) vTask vtWATCH @ WATCH-OBJECT @ ASCIIZ> ;

2VARIABLE scnd

: FILE~CHANGE ( -- )  \ Печатаем в консоль имена изменившихся файлов.
    FT-CUR FT>SEC scnd 2!
    RECURSIVE
    HappyWatchDir S" \*" S+ FOR-FILES
        FOUND-FULLPATH FILE-TIME FT>SEC scnd 2@ D=
        FOUND-FULLPATH FILE-ATIME FT>SEC scnd 2@ D= OR
        FOUND-FULLPATH FILE-WTIME FT>SEC scnd 2@ D= OR
        IF FOUND-FULLPATH TYPE CR THEN
    ;FOR-FILES
;

SingleInstance
 WatchDir: "f:\YandexDisk\Backup"
 WatchDir: "f:\YandexDisk\Документы"
 WatchDir: "f:\YandexDisk\Загрузки"
 WatchDir: "f:\YandexDisk\Медиа"
\ Если папок много то лучше их сгруппировать, например сделать папку Медиа а в ней подпапки Музыка Видео Фото Обои и т.д.
WatchSubtree
Rule: PROC-EXIST: "yandexdisk*" NOT
Action:
    FILE~CHANGE
    StartIn: "C:\Program Files\Yandex\YandexDisk\bin"
    ShowNormal   RealtimePriority
    START-APP: C:\Program Files\Yandex\YandexDisk\bin\YandexDisk.exe -desktop
    20 2000 BEEP
)#


Вот если изменения будут сразу в нескольких папках тогда надо как-то по другому.
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Как исключить папку сразу в строке "WatchDir"

Postby samarian » Tue, 17 Jan 2017, 20:29

я бы мог отдельно за фолдерами следить главными,
но чет решил не заморачиваться, а то в искстарте дошел до того, что проверял список всех папок, сверял с именами открытых окон (яндексдиск закрывает любое открытое окно-папку в "D/YandexDisk/*/*/....." при закрытии яндексдиска. Наплодил кучу переменных по этому и другим вопросам, получилось порядка 100-200 действий только в одной задаче. Все работало отлично и быстро, но я так же углубился и во все остальные задачи, и закончил все это дело через пару месяцев только. Я как бы наркоман, хотя и не программист даже, а просто менеджер,
но чет меня затягивает, ничего с собою не могу поделать. Поэтому решил лаконично все сделать. Если нельзя сразу в первой строке мониторинга, то забейте)

HappyWatchDir DDDD
samarian
 
Posts: 4
Joined: Sat, 14 Jan 2017, 19:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests