Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: SH проверка в цикле с шагом в секунду  (Прочитано 1236 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
вот код который покажет ID процессов под логином "mouse" c встречающемся текстом Cham
как на это добавить проверку
если процесс встречается в течении 1 мин. отписать "process exist"
как только процесс пропал к примеру на 32 секунде отписать "process close"
/bin/ps hww -u "mouse" -o sess,ppid,pid,cmd | \
while read sess ppid pid cmd; do
    [ "$ppid" = 1 ] || continue
    # this test doesn't work because Jenkins sets a new Session ID
    # [ "$sess" = "$MY_SESSION_ID" ] || continue
    echo "$cmd" | grep Cham > /dev/null
    [ $? = 0 ] || continue
    # found a PID
    echo $pid
done


andrey_p

  • Гость
Re: SH проверка в цикле с шагом в секунду
« Ответ #1 : 24 Февраля 2012, 19:09:09 »
 :D Ничего не получиться, поскольку Jenkins уже sets a new Session ID. )))

ЗЫ Задачу в общем опиши, поскольку приведенный фрагмент кода имеет довольно мало смысла - он (как я понимаю) относиться только к демонам, запущенным при старте системы или к зомби: [ "$ppid" = 1 ] || continue.

И конкретную задачу точнее сформулируй - в течении 1-й минуты после чего, 32-я секунда чего???

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #2 : 24 Февраля 2012, 21:20:59 »
mouserok, установи Nagios
Госпади, покарай извращенцев которые генерят бездарные ТЗ вместо того чтобы пользоваться готовыми инструментами

Пользователь решил продолжить мысль 24 Февраля 2012, 21:22:15:
Ну почему весь шлак сливают в ветку под названием "программирование"???
mouserok, как кофеварку починить сюда же спросишь?
« Последнее редактирование: 24 Февраля 2012, 21:23:40 от Yurror »

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #3 : 27 Февраля 2012, 10:38:24 »
andrey_p,
взял просто как пример ...
после того как одна из програм получила сигнал закрытия
нужно проверить закрылась она или нет (это вот как раз может показать скрипт который я указал)
но вот как его в цикл пихнуть и чтоб от 1 сек до 60 сек, если процесса нет - отписать "process close"
а если превысило 60 сек ожидания отписать "process exist" и закончить скрипт

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #4 : 27 Февраля 2012, 14:21:13 »
andrey_p,
взял просто как пример ...
после того как одна из програм получила сигнал закрытия
нужно проверить закрылась она или нет (это вот как раз может показать скрипт который я указал)
вот вам тестовая "ленивая" программа, которая завершается после ^C через заданное число секунд (параметром строки запуска или 5 по дефаулту):
Код: (C) [Выделить]
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>

int wait = 5;

static void sig_handler( int signo ) {
   sleep( wait );
   exit( 0 );
}

int main( int argc, char *argv[] ) {
   if( argc > 1 && atoi( argv[ 1 ] ) != 0 ) wait = atoi( argv[ 1 ] );
   signal( SIGINT, sig_handler );
   while( 1 ) pause();
}
вот её автономное выполнение:
[olej@notebook signal]$ ./sigwait 2
^C[olej@notebook signal]$
вот на её примере, задержанного завершения, объясните более внятно что хотелось бы.
« Последнее редактирование: 28 Февраля 2012, 03:35:26 от Olej »

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #5 : 27 Февраля 2012, 15:48:15 »
Olej,
конечно спасибо .... но мне нужно на SH реализации

andrey_p

  • Гость
Re: SH проверка в цикле с шагом в секунду
« Ответ #6 : 27 Февраля 2012, 15:55:30 »
Так что-то вроде:

# pid уже получен каким-либо образом
sleep 60
if $(ps | grep -q "$pid"); then echo $pid exists; fi

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #7 : 27 Февраля 2012, 16:12:03 »
andrey_p,
ну почти .... цикла не хватает
вот есть пример на CMD
for /l %%a in (60,-1,1) do Echo Sleep %%a secкак он должен выглядеть чтоб работало под SH

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #8 : 27 Февраля 2012, 16:14:50 »
Olej,
конечно спасибо .... но мне нужно на SH реализации

- я вам подбросил не "реализацию", а тестовое приложение, которое выжидает завершения после получения сигнала на это завершение (вообще то, то, о чём вы говорили, ... некоторое подобие сервиса-сервера, завершения которого нужно ожидать)...

- ... для того, чтобы на конкретном примере такого тест-приложения: а). детально и внятно объяснить что хотелось бы получить б). проверять/демонстрировать пригодность того, что будет в качестве "SH реализации"(с) ;)


Пользователь решил продолжить мысль 27 Февраля 2012, 16:16:26:
andrey_p,
ну почти .... цикла не хватает
вот есть пример на CMD
for /l %%a in (60,-1,1) do Echo Sleep %%a secкак он должен выглядеть чтоб работало под SH

кто такой CMD? ... про SH ещё как-то можно догадываться...

вы могли бы излагать на языке не олбанском?
« Последнее редактирование: 27 Февраля 2012, 16:16:26 от Olej »

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #9 : 27 Февраля 2012, 16:21:19 »
кто такой CMD? ... про SH ещё как-то можно догадываться...
вы могли бы излагать на языке не олбанском?
BAT или CMD - Командная строка Windows
вот этот пример работает под Windows for /l %%a in (60,-1,1) do Echo Sleep %%a secа мне нужно под SH в Linux

Оффлайн absent

  • Активист
  • *
  • Сообщений: 368
  • Ubuntu 16.04
    • Просмотр профиля
Re: SH проверка в цикле с шагом в секунду
« Ответ #10 : 27 Февраля 2012, 16:47:00 »
вот этот пример работает под Windows for /l %%a in (60,-1,1) do Echo Sleep %%a secа мне нужно под SH в Linux
for i in {60..1}; do echo Sleep $i sec; done
for (( i=60; i>=1; i-- )); do echo Sleep $i sec; done

 

Страница сгенерирована за 0.039 секунд. Запросов: 25.