The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Пишу свой шедулер"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Пишу свой шедулер"
Сообщение от se7en.ru Искать по авторуВ закладки on 27-Дек-04, 16:21  (MSK)
Понадобилось решить следующую задачу - надо запускать перловый скрипт раз в 5 секунд.
Т.к. cron интервалы меньше 1 минуты не понимает написал свою програмку.
В принципе всё работает, но мне кажется что дурью маюсь и ответ лежит на поверхности. Как из подобных ситуаций выходят гуру?

Кому интересно програмка:
#include <unistd.h>
#include <stdio.h>
#include <syslog.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/cdefs.h>
#include <sys/_null.h>
#include <sys/_types.h>

void fsignal(int sig) {
  switch(sig) {
    case SIGALRM:
      system("/home/cgi/server.pl");
      break;
    case SIGTERM:
    case SIGINT:
    case SIGQUIT:
      syslog(LOG_NOTICE,"DAEMON_TST daemon stopped on signal %d",sig);
      closelog();
      exit(0);
      break;
    default:
      break;
  }
}

int main(int argc,char** argv) {
  struct itimerval val;
//  setgid(65534);
//  setuid(65534);
//  chdir("/");
  fclose(stdin);
  fclose(stdout);
  fclose(stderr);
  if(fork())
    exit(0);
  setsid();
  int j;
  for(j=1; j<32; j++) {
    signal(j,fsignal);
  }
  syslog(LOG_NOTICE,"DAEMON_TST daemon started");
  val.it_interval.tv_sec = 5;
  val.it_interval.tv_usec = 0;
  val.it_value.tv_sec = 5;
  val.it_value.tv_usec = 0;
  setitimer(ITIMER_REAL, &val, 0);
  while(1) pause();
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Пишу свой шедулер"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 28-Дек-04, 22:27  (MSK)
Перловый из перла и запускай лучше)
а вообще man select, man poll
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Пишу свой шедулер"
Сообщение от XMan Искать по авторуВ закладки(ok) on 29-Дек-04, 00:26  (MSK)
А зациклить в перле код и в конце цикла спать 5 секунд ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Пишу свой шедулер"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 29-Дек-04, 12:01  (MSK)
>А зациклить в перле код и в конце цикла спать 5 секунд
>?

А я про что? :) А вообще это сложно, лучше написать свой шедулер)) А лучше операционку)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Пишу свой шедулер"
Сообщение от ACCA Искать по авторуВ закладки(ok) on 29-Дек-04, 02:06  (MSK)
>Понадобилось решить следующую задачу - надо запускать перловый скрипт раз в 5
>секунд.
[...]
>      system("/home/cgi/server.pl");


#!/bin/sh

while sleep 5
do
   /home/cgi/server.pl
done

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Пишу свой шедулер"
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 29-Дек-04, 18:22  (MSK)
>>Понадобилось решить следующую задачу - надо запускать перловый скрипт раз в 5
>>секунд.
>[...]
>>      system("/home/cgi/server.pl");
>
>
>#!/bin/sh
>
>while sleep 5
>do
>   /home/cgi/server.pl
>done


Ну конечно, не слушай их ;) Они тебе весь полет фантазии задушат ;) На начальном этапе обязательно нужно писать на C аналоги write, netcat, tcpserver, shell-scripts и т.д. Очень развивает мышление и заставляет разбираться в ранее неизведанных ситуациях. Я бы посоветовал сделать основную ветку проги зацикленную, но чтобы она не спала все 5 секунд, а щелкала по 1000 раз в секунду, постоянно сверяясь с системным таймером, сохраняя временное первого запуска, а когда текущее время будет прошлый раз + N*5 сек, форкалась и через exec запускала твою прогу, тогда точность будет намного выше и не поползет от промежуточных погрешностей. Конечно, значение инит-таймера придется время от времени сбрасывать, чтоб не переполнились переменные при рассчете, но это я оставляю на самостоятельную реализацию ;))))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Пишу свой шедулер"
Сообщение от se7en.ru Искать по авторуВ закладки on 30-Дек-04, 12:50  (MSK)
>#!/bin/sh
>
>while sleep 5
>do
>   /home/cgi/server.pl
>done

Гыы :-)
прикольно! вот что значит не знать sh :-)
спасибо за совет.

зато теперь я знаю как делать демонов :-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Пишу свой шедулер"
Сообщение от kir Искать по авторуВ закладки(??) on 05-Янв-05, 19:44  (MSK)
>>#!/bin/sh
>>
>>while sleep 5
>>do
>>   /home/cgi/server.pl
>>done
>
>Гыы :-)
>прикольно! вот что значит не знать sh :-)
>спасибо за совет.
>
>зато теперь я знаю как делать демонов :-)

демоны это немножко другое
а в данном случае пример программы с засыпанием в Н секунд

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Пишу свой шедулер"
Сообщение от HEaLIX Искать по авторуВ закладки on 14-Янв-05, 00:06  (MSK)
Сам недавно искал.

Гуру используют select/pool

:)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Пишу свой шедулер"
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 14-Янв-05, 13:03  (MSK)
>Сам недавно искал.
>
>Гуру используют select/pool
>
>:)

Да .. да, я знал! :-)

А вообще и crond использует select, не только гуру :-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру