LINUX.ORG.RU

[BASH] Как поставить таймер или альтернативы ATD


0

1

Если я скажу демону AT выполнить заданную команду через 1 минуту - это, во-первых, отнюдь не будет означать того, что объективная необходимость выполнения команды возникнет через минуту, а не раньше (и здесь у AT явно неудовлетворительная дисркетность), а во-вторых - никто не даст мне гарантии, что AT выполнит команду именно через минуту, а не через две минуты или даже через две секунды.
Штука вообще-то полезная, поскольку она вроде бы единственная позволяет запланировать событие относительно другого события, выгодно отличаясь от тупого полинга, котоорый только и можно запланирвать, что в кроне, что в фкроне.
А неужто же у древнего, как Г мамонта, ATD нет совсем альтернатив?

★★★★★

cat tea.timer.sh
#!/bin/bash

sleep 180 ; eject
sin_a ★★★★★ ()

Заюзай вменяемый(*) crond, у них дискретность — какая угодно.

——

* fcron — вменяемый crond. На правах рекламы.

x3al ★★★★★ ()

>Штука вообще-то полезная, поскольку она вроде бы единственная позволяет запланировать событие относительно другого события

В смысле? Заставить первое событие на выходе запланировать второе?

x3al ★★★★★ ()
Ответ на: комментарий от x3al

Именно! Я даже статью написал как-то на эту тему. Так оно работает, да, и даже долгоиграющий процесс может запланироватьс сам себя грохнуть, если вдруг зависнет в бесконечном цикле. Вот только дискретность в минуту - это издевательство, за это время уже число пи до 5000-ного знака досчитается на современных процессорах!

DRVTiny ★★★★★ ()
Ответ на: комментарий от DRVTiny

Ну пусть планирует себя в fcrond. Там _точно_ есть любая дискретность. Я настраивал через fcrond обновление часов в статусбаре dwm (картинка_с_троллейбусом.жпг), поэтому знаю.

x3al ★★★★★ ()
Ответ на: комментарий от sin_a

Это, мягко говоря, полный отстой. Имеется в виду: запланируй выполнение чего-либо (даже не обязательно своего кода) и делай что угодно ещё.
В моём конкретном случае это нужно, чтобы создать файл-триггер ошибки (сообщения в логе об ошибке), запланировать в AT его удаление через какое-то разумное время и выйти. Феерическим маразмом было бы просто оставлять интерпретатор BASH в памяти только для того, чтобы через какое-то время удалить созданный ранее файл. Я уж не говорю о том, как интересно это будет, если вдруг в логе обнаружится много сообщений об ошибках.

DRVTiny ★★★★★ ()
Ответ на: комментарий от sin_a

И это... вот представьте себе цикл ожидания какого-то события, которое на самом деле совершенно необязательно наступит. Тем не менее, цикл бесконечный, поскольку вы не знаете точно, когда произойдёт событие. Можно конечно опять с помощью sleep, вставленных в цикл типа for проверять, но... что если в большинстве случаев событие наступает, а латентность реакции на него совершенно ни к чему? Планирование программой в AT собственного «убийства» помогает избежать бесконечного зацикливания в худшем случае, при этом не создавая поводов для откровенного тупняка во всех нормальных случаях.
P.S. Вообще у сторонников sleep в BASH и GOTO на древних диалектах BASIC есть что-то общее...

DRVTiny ★★★★★ ()
Ответ на: комментарий от DRVTiny

Так задачу надо уточнять. Заданную sleep решает предельно точно.

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

sin_a ★★★★★ ()
Ответ на: комментарий от sin_a

Не надо никакого парсера, есть незаслуженно брошенный его разработчиком на произвол судьбы swatch!

DRVTiny ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.