Как осуществить последовательный запуск задач?

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

Как осуществить последовательный запуск задач?

Postby hjsfuwqmtx » Sat, 15 Sep 2018, 22:12

Всем привет.

Подскажите, пожалуйста, как словить условие "нет обмена данными с жёстким диском в течении некоторого времени".

Хочу запускать задачу при запуске компьютера, когда все службы и автозапускаемые программы запустились и выполнили свои работы, и компьютер уже 15 секунд просто ничего не делает (т.е. загрузка CPU < 5% и нет чтения/записи с HDD). Для достижения этой цели не знаю только, как определить простаивание HDD.


Спасибо.
User avatar
hjsfuwqmtx
 
Posts: 5
Joined: Sat, 15 Sep 2018, 22:00

Re: Событие/условие: HDD не используется 15 секунд

Postby elos » Wed, 19 Sep 2018, 15:55

Какая задача требует таких условий? Если не секрет...
"Везение" - это результат тщательной подготовки, "невезение" - следствие разболтанности и лени. - Роберт Хайнлайн
Хорошо сформулированный вопрос отпадает сам собой.
elos
 
Posts: 671
Joined: Tue, 25 Apr 2006, 11:15

Re: Событие/условие: HDD не используется 15 секунд

Postby hjsfuwqmtx » Thu, 20 Sep 2018, 16:11

Хочу отложенно запускать автозапускаемые задачи, чтобы они все не ломились в один момент автозапускаться.
Когда 30 приложений все одновременно стартуют, они конкурируют друг с другом, мешая друг другу. И в этом момент человек тоже ничего делать не может.

Сейчас отложенный автозапуск достигается путём того, что перед каждой автозапускаемой задачей вставляется задержка = НомерЗадачи*10 сек. В принципе, это работает. Я это называю (в шутку) парад автоматических задач. Но это не совершенный путь. Каждому автозапускаемому приложению требуется разное время для старта и выполнения начальных работ. Кроме того, отдельное автозапускаемое приложение может в разных случаях потребовать разное время запуска и выполнения начальных работ. К примеру, почтовая программа может в какой-то день начать по графику архивировать почту, в другие же дни она этого не делает.
В общем, выбирать какую-то фиксированную задержку (10 с., 15 с., 20-25-30-...) - не очень подходит. Возьмёшь слишком малое значение - не будет хватать некоторым автозапускаемым приложениям, возьмёшь слишком большое - автозапуск приложений затянется очень сильно.

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

Для этого и нужно словить условие, что компьютер уже некоторое время не обменивается с жёстким диском. Как вариант, - уже некоторое время объём обмена компьютера с жёстким диском меньше 1 MiB/s.

В оснастке Performance есть счётчики для жёстких дисков (% Idle, Average Disk Bytes Transfer, Disk Transfers per sec, др.) (причём для отдельных логических дисков и для целого жёсткого диска). Но, как добраться из nnCron до этих счётчиков, я не знаю.
User avatar
hjsfuwqmtx
 
Posts: 5
Joined: Sat, 15 Sep 2018, 22:00

Re: Событие/условие: HDD не используется 15 секунд

Postby VoidVolker » Fri, 21 Sep 2018, 00:39

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

Событие/условие: HDD не используется 15 секунд

Postby hjsfuwqmtx » Fri, 21 Sep 2018, 14:10

VoidVolker wrote:Задача 1 отработала — ставим флаг...

В том-то и суть. Как мне определить, что задача отработала?

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

Запуск процесса и окончательное выполнение запущенным процессом своих первоначальных действий - это разные вещи.
Процесс может успешно запуститься; но ведь это не конец. Он потом может ещё несколько минут интенсивно работать (занимать и процессор, и HDD).
Напр., антивирусная проверка основных мест при включении компьютера. Запустится она довольно быстро. Но потом ещё несколько минут будут считываться антивирусные базы, начнутся проверка наличия обновлений и скачивание их, потом начнётся проверка диска. Всё это займёт продолжительное время.

Есть процессы, которые после запуска тот час же выполнят свою работу (напр., ctfmon.exe, который покажет индикатор раскладки языка). Но есть и те, которые после запуска ещё долго будут интенсивно использовать CPU и HDD.

Поэтому запускать задачи друг за другом мне не подходит. Фактически они будут запущены одновременно (100 мс разницы во времени запуска - не в счёт), и, следовательно, будут конкурировать друг с другом за ресурсы компьютера, мешая друг другу. Именно этого я и хотел избежать. Я хочу, чтобы следующая автозапускаемая задача запустилась, когда предыдущая автозапускаемая задача запустилась, и полностью выполнила свои первоначальные работы, и перешла в режим простоя-ожидания.
User avatar
hjsfuwqmtx
 
Posts: 5
Joined: Sat, 15 Sep 2018, 22:00

Re: Событие/условие: HDD не используется 15 секунд

Postby VoidVolker » Fri, 21 Sep 2018, 15:32

Я очень удивлён, что меня не поняли.

Да нет, таки как раз вас очень даже поняли. Вы спрашивали про наблюдение за активностью диска. Ответ прост: для этого нужен драйвер фильтр уровня ядра ОС и еще там куча кода. Кстати, ОС может в рандомное время рандомно обращаться к диску как и любая другая программа. Вы придумали решение несуществующей проблемы. А надо было просто спросить как решить вашу задачу: последовательный запуск задач ннкрона. Большинство именно придумывают решение надуманной проблемы, вместо того, чтобы найти решение существующей задачи.
Ответ очень прост: каждая задача в ннкроне запускается отдельным процессом и у каждой задачи в ннкроне есть начало и есть конец. Можно просто вставить в конец задачи код и он будет выполнен перед завершением задачи или можно просто вставить код запуска следующей задачи. Кроме того, ннкрон умеет ждать завершения работы процесса, проверять нагрузку на процессор определенным процессом, знает когда процесс завершается. Так что все достаточно просто.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2923
Joined: Tue, 25 Apr 2006, 17:56

Re: Событие/условие: HDD не используется 15 секунд

Postby hjsfuwqmtx » Fri, 21 Sep 2018, 18:34

VoidVolker wrote:Кстати, ОС может в рандомное время рандомно обращаться к диску как и любая другая программа.

Могут. Только это не будет сплошное, непрерывное, длительное обращение к диску.

VoidVolker wrote:Вы придумали решение несуществующей проблемы. А надо было просто спросить как решить вашу задачу: последовательный запуск задач ннкрона.
Ответ очень прост: каждая задача в ннкроне запускается отдельным процессом и у каждой задачи в ннкроне есть начало и есть конец. Можно просто вставить в конец задачи код и он будет выполнен перед завершением задачи или можно просто вставить код запуска следующей задачи. Кроме того, ннкрон умеет ждать завершения работы процесса, проверять нагрузку на процессор определенным процессом, знает когда процесс завершается.

Вот есть 3 автозапускаемых программы:
C:\Workrave\Workrave.exe
C:\KeySwitcher\KeySwitcher.exe
C:\ProcessExplorer\Procexp.exe

Ни одна из них не завершается после запуска и выполнения полезной работы, а продолжает работать бесконечно долго (до выключения компьютера). Каждая из них в первые несколько секунд после запуска интенсивно использует CPU и HDD, затем просто остаётся запущенной, но почти не использует CPU и HDD.

Как мне их запустить так, чтобы они запускались не одновременно? Разница в несколько милисекунд не подойдёт, т.к. это фактически тоже одновременный запуск.

Так (вариант 1)? :
Code: Select all
#( DelayedAutoRun
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "Workrave.exe" NOT PROC-EXIST: "KeySwitcher.exe" NOT AND PROC-EXIST: "Procexp.exe" NOT AND
Action:
   StartIn: "C:\Workrave\"
   ShowNormal   NormalPriority
   START-APP: "C:\Workrave\Workrave.exe"

   StartIn: "C:\KeySwitcher\"
   ShowNormal   NormalPriority
   START-APP: "C:\KeySwitcher\KeySwitcher.exe"

   StartIn: "C:\ProcessExplorer\"
   ShowNormal   NormalPriority
   START-APP: "C:\ProcessExplorer\Procexp.exe"
)#


Или так (вариант 2)? :
Code: Select all
#( DelayedAutoRun
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "Workrave.exe" NOT PROC-EXIST: "KeySwitcher.exe" NOT AND PROC-EXIST: "Procexp.exe" NOT AND
Action:
   StartIn: "C:\Workrave\"
   ShowNormal   NormalPriority
   START-APP: "C:\Workrave\Workrave.exe"

   PAUSE: 10000

   StartIn: "C:\KeySwitcher\"
   ShowNormal   NormalPriority
   START-APP: "C:\KeySwitcher\KeySwitcher.exe"

   PAUSE: 10000

   StartIn: "C:\ProcessExplorer\"
   ShowNormal   NormalPriority
   START-APP: "C:\ProcessExplorer\Procexp.exe"
)#


Или так (вариант 3)? :
Code: Select all
#( DelayedAutoRunWorkrave
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "Workrave.exe" NOT
Action:
   StartIn: "C:\Workrave\"
   ShowNormal   NormalPriority
   START-APP: "C:\Workrave\Workrave.exe"
)#

#( DelayedAutoRunKeySwitcher
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "KeySwitcher.exe" NOT
Action:
   StartIn: "C:\KeySwitcher\"
   ShowNormal   NormalPriority
   START-APP: "C:\KeySwitcher\KeySwitcher.exe"
)#

#( DelayedAutoRunProcessExplorer
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "Procexp.exe" NOT
Action:
   StartIn: "C:\ProcessExplorer\"
   ShowNormal   NormalPriority
   START-APP: "C:\ProcessExplorer\Procexp.exe"
)#


Или так (вариант 4)? :
Code: Select all
#( DelayedAutoRunWorkrave
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "Workrave.exe" NOT
Action:
   StartIn: "C:\Workrave\"
   ShowNormal   NormalPriority
   START-APP: "C:\Workrave\Workrave.exe"
)#

#( DelayedAutoRunKeySwitcher
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "KeySwitcher.exe" NOT
Action:
   PAUSE: 10000

   StartIn: "C:\KeySwitcher\"
   ShowNormal   NormalPriority
   START-APP: "C:\KeySwitcher\KeySwitcher.exe"
)#

#( DelayedAutoRunProcessExplorer
AsLoggedUser
WatchLogon: "*"
Rule: PROC-EXIST: "Procexp.exe" NOT
Action:
   PAUSE: 20000

   StartIn: "C:\ProcessExplorer\"
   ShowNormal   NormalPriority
   START-APP: "C:\ProcessExplorer\Procexp.exe"
)#


VoidVolker wrote:Так что все достаточно просто.

Покажите, пожалуйста, это достаточно простое решение. Приведённые мною 4 варианта не решают или решают неэффективно поставленную задачу.
User avatar
hjsfuwqmtx
 
Posts: 5
Joined: Sat, 15 Sep 2018, 22:00

Re: Как осуществить последовательный запуск задач?

Postby dothen » Sat, 22 Sep 2018, 16:07

http://www.nncron.ru/help/RU/commands/p ... toring.htm

Code: Select all
#( DelayedAutoRun
: ZHDUN ( -- ) BEGIN 1000 PAUSE 3000 (CPU-USAGE) 0= UNTIL ;
\ : ZHDUN2 ( -- ) BEGIN 1000 PAUSE CPU-USAGE 2 < UNTIL ;
AsLoggedUser
WatchLogon: "*"
Action:
    ZHDUN
    StartIn: "C:\Workrave\"
    ShowNormal   NormalPriority
    START-APP: "C:\Workrave\Workrave.exe"

    ZHDUN
    StartIn: "C:\KeySwitcher\"
    ShowNormal   NormalPriority
    START-APP: "C:\KeySwitcher\KeySwitcher.exe"

    ZHDUN
    StartIn: "C:\ProcessExplorer\"
    ShowNormal   NormalPriority
    START-APP: "C:\ProcessExplorer\Procexp.exe"
)#
dothen
 
Posts: 189
Joined: Mon, 16 Mar 2015, 04:58

Re: Событие/условие: HDD не используется 15 секунд

Postby AlikasS » Wed, 26 Sep 2018, 09:38

hjsfuwqmtx wrote:В оснастке Performance есть счётчики для жёстких дисков (% Idle, Average Disk Bytes Transfer, Disk Transfers per sec, др.) (причём для отдельных логических дисков и для целого жёсткого диска). Но, как добраться из nnCron до этих счётчиков, я не знаю.

Значения счетчиков производительности можно посмотреть из консоли PowerShell, где для этого есть специальный командлет Get-Counter
вывод Get-Counter можно перенаправить например в файл
User avatar
AlikasS
 
Posts: 1444
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Событие/условие: HDD не используется 15 секунд

Postby hjsfuwqmtx » Thu, 04 Oct 2018, 16:29

Слово ZHDUN, конечно, мне принесёт определённую пользу. Но в нём нет проверки неиспользования HDD (по аналогии с CPU-USAGE что-нибудь такое: HDD-USAGE). Я знаю случаи, когда CPU почти простаивает, но обмен с HDD идёт полным ходом (померяно в оснастке Performance (также по HDD-светодиоду, звукам HDD), а не на глазок). Напр., программа WinDirStat (показывает в графическом виде распределение занимаемого места по папкам, типам файлов). Так что, в таких случаях ZHDUN не сработает должным образом: он определит, что (якобы) компьютер простаивает (т.е. предыдущая задача, предположительно, выполнила интенсивные 1-воначальные работы и успокоилась), а это совсем не так.

В итого, покрутившись кругами, мы всё равно пришли вопросу, заданному мною в 1-м сообщении - как определить простаивание HDD.
Да, я понял, что таких готовых решений (типа HDD-USAGE) нет. Я постараюсь добраться до этого события через оснастку Performance.

VoidVolker wrote: А надо было просто спросить как решить вашу задачу: последовательный запуск задач ннкрона. .... Так что все достаточно просто.

Всё-таки последовательный запуск задач - тема близко связанная с моей, но не совсем та, о которой я начал эту ветку. Я именно хотел узнать момент простаивания HDD. А то, что этот момент я буду использовать для последовательного запуска задач - это уже отдельная (но связанная с моей) тема.

VoidVolker wrote:каждая задача в ннкроне запускается отдельным процессом и у каждой задачи в ннкроне есть начало и есть конец. Можно просто вставить в конец задачи код и он будет выполнен перед завершением задачи или можно просто вставить код запуска следующей задачи. Кроме того, ннкрон умеет ждать завершения работы процесса, проверять нагрузку на процессор определенным процессом, знает когда процесс завершается.

Windows тоже запускает задачи (а не только nnCron). Я этим процессам тоже не хочу мешать своими автозапускаемыми задачами. И Windows запускает при загрузке неизвестно сколько процессов и каких (и это может меняться по ситуации), и как долго они будут работать, и завершаться ли вообще или останутся в фоне до выключения компьютера. К чему я в nnCron'е привяжусь, запуска и завершения каких процессов мне в nnCron'е ожидать? В общем, самое простое - дождаться, когда ни CPU, ни HDD уже не используются (или очень мало используются), и уже тогда запускать свою очередную автозапускаемую задачу.

AlikasS wrote:Значения счетчиков производительности можно посмотреть из консоли PowerShell, где для этого есть специальный командлет Get-Counter
вывод Get-Counter можно перенаправить например в файл

А нету варианта получить эти счётчики через CMD.exe или через Win32API ? Нужно, чтобы решение работало на Windows XP (там нет PowerShell'а (да и не охота учить его)).
User avatar
hjsfuwqmtx
 
Posts: 5
Joined: Sat, 15 Sep 2018, 22:00


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests