[linux][cron]Запуск проги ровно в начале часа

tony33

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

artimon

Какая-то странная задача, если ей так важно время запуска.
Запускай её на минут раньше и жди нужного времени в самой программе, например.

evgen5555

Чуве, забей на линукскс, если тебе нужна точность.

evgen5555

>Запускай её на минут раньше и жди нужного времени в самой программе, например.

А если это сторонняя программа?

artimon

Значит не судьба.
Хотя ты прав насчёт того, что при таких жёстких требованиях надо забить на линух и юзать какую-нибудь RTOS.

Ivan8209

Запустить следящую программу.
---
...Я работаю антинаучным аферистом...

evgen5555

А где гарантии, что форк-екзек сработает за XXX мс?

artimon

Хм. По моему cron и есть такая следящая программа.

Ivan8209

Ты GPL читал?
---
...Я работаю антинаучным аферистом...

evgen5555

Я очень не рюхаю в линуксах, но, может быть, ранлевелы инита могут как-то помочь?

Ivan8209

Может, запустить и отренайсить так, как надо?
Или сигналы попосылать.
---
...Я работаю антинаучным аферистом...

artimon

И что?
Всё равно никто не может гарантировать что система в этот момент не занимается сжатием видео с максимальным приоритетом. И ещё полчаса будет этим заниматься.

Ivan8209

Я думаю, что исходно в задаче не подразумевалось настолько реального времени.
---
...Я работаю антинаучным аферистом...

Ivan8209

Отренайсить всё, что не надо, так, как надо.
---
...Я работаю антинаучным аферистом...

artimon

В исходной задаче упоминается три секунды. Если программе это настолько критично, то ей уже ничего не поможет.

tony33

Вопрос не про линукс, а про cron. Точность до милисекунд мне не нужна, плюс-минус 1 секунда - нормально.
Непонятно, крон запускает задачи параллельно или последовательно? И если последовательно, как ему объяснить, что данная задача имеет более высокий приоритет?

Ivan8209

Ну, надо это на совести поставившего вопрос.
Это он должен сообщить допустимую задержку.
---
...Я работаю антинаучным аферистом...

tony33

Хорошо, допустимая задержка: 1 секунда. Это что так мало?

Ivan8209

> Непонятно, крон запускает задачи параллельно или последовательно?
Читай исходник.
БСДёвый, судя по всему, последовательно.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

Ivan8209

Зависит от нагруженности системы.
---
...Я работаю антинаучным аферистом...

tony33

>Читай исходник.
может все таки кто-нибудь знает?

Ivan8209

Я знаю.
Правь исходник.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

artimon

У меня в линухе параллельно
~> crontab -l
* * * * * /home/lynn/bin/a.sh
* * * * * /home/lynn/bin/c.sh
* * * * * /home/lynn/bin/d.sh
* * * * * /home/lynn/bin/b.sh
~> ps ax
...
15206 ? S 0:00 /USR/SBIN/CRON
15207 ? Ss 0:00 /bin/sh -c /home/lynn/bin/b.sh
15208 ? S 0:00 /USR/SBIN/CRON
15209 ? Ss 0:00 /bin/sh -c /home/lynn/bin/d.sh
15210 ? S 0:00 /USR/SBIN/CRON
15211 ? Ss 0:00 /bin/sh -c /home/lynn/bin/c.sh
15212 ? S 0:00 /USR/SBIN/CRON
15218 ? Ss 0:00 /bin/sh -c /home/lynn/bin/a.sh
...
~>

tony33

>Зависит от нагруженности системы.
Тут даже не в задержке дело. Просто на машине у крона есть такие задания, которые могут выполняться более минуты! Если задания запускаются последовательно, то надо как-то объяснить крону, что моя задача приорететнее.

tony33

О, пойду проверю как у меня

Ivan8209

Не могу проверить, но

for (j=jhead; j; j=jn) {
do_command(j->e, j->u);
jn = j->next;
free(j);
run++;
}

В do_command спрятан обычный switch(fork{...}.
Я не знаю, как у тебя.
Да, cron от Paul Vixie.
---
...Я работаю...

Ivan8209

> Просто на машине у крона есть такие задания,
> которые могут выполняться более минуты!
И что?
> Если задания запускаются последовательно,
Тогда они всегда запускаются параллельно, иначе это не cron.
> то надо как-то объяснить крону, что моя задача приорететнее.
Изучить исходники и правильно составить crontab.
Или забить в cron.
---
...Я работаю...

artimon

Ну, если верить man cron, то у меня тоже
cron - daemon to execute scheduled commands (Vixie Cron)

Я в исходники не смотрел, я просто запустил его.
ЗЫ. Содержание {a,b,c,d}.sh
#!/bin/sh
sleep 20

Ivan8209

Мне негде запускать:

void
do_command(e, u)
entry *e;
user *u;
{
...
switch (fork {
case -1:
log_it("CRON",getpid"error","can't fork");
break;
case 0:
/* child process */
acquire_daemonlock(1);
child_process(e, u);
/* NOTE THE LINE ABOVE -- K. */
Debug(DPROC, ("[%d] child process done, exiting\n", getpid
/* NOTE THE LINE BELOW -- K. */
_exit(OK_EXIT);
break;
default:
/* parent process */
break;
}
Debug(DPROC, ("[%d] main process returning to work\n", getpid
}

Отсюда:

/* Copyright 1988,1990,1993,1994 by Paul Vixie
...
 * Paul Vixie <vix.com> uunet!decwrl!vixie!paul
 */
#if !defined(lint) && !defined(LINT)
static const char rcsid[] =
  "$FreeBSD: src/usr.sbin/cron/cron/do_command.c,v 1.22 2004/05/16 19:29:33 yar Exp $"

---
...Я работаю антинаучным аферистом...

tony33

Ну так это и есть параллельно
do_command же не ждет завершения каждый команды, а просто запускает

bleyman

Напиши прогу в семь строк, которая запустит нужную ровно в нужное время. Добавь ещё две строчки, чтобы запустить нужную с реалтайм приоритетом. Скажи крону запускать твою прогу на полминуты раньше нужного времени, и тоже с реалтайм приоритетом (иссессно, прога должна постоянно вызывать sleep, или как там он у вас называется). И не мучайся =)

Ivan8209

Вот так и наследуется приоритеты.
---
...Я работаю антинаучным аферистом...

bleyman

[An absolutely senseless reply to the completely senseless comment]
Используй кнопку "превью", с её помощью ты сумеешь взглянуть на свой коммент свежим взглядом и отловить бОльшую часть семантических/синтаксических/орфографических ошибок
[/An absolutely senseless reply to the completely senseless comment]

Barbie29

man nice на предмет других кроновских программ
Оставить комментарий
Имя или ник:
Комментарий: