Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отслеживание процессов unix 
V
    Опции темы
larinva
Дата 4.4.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



Всем привет!
Пишу скрип который отслеживает работу нужных мне процессов, так вот столкнулся с такой проблемой, а как реализовать с несколькими процессами. С одним делаю так:
Код

#!/usr/bin/env python
import string

import commands, os, string

try:
    #
    httpd = commands.getoutput("ps ax|grep " + "httpd")
    proginfo = string.split(httpd)
    httpd = 'httpd'
    for i in proginfo:
        if httpd in i:
            print "Process httpd", i
except:
    print "There was a problem with the program."

Поделитесь своими соображениями, плиз!!! smile  
PM MAIL   Вверх
larinva
Дата 4.4.2011, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



Народ, ну поделитесь мысля  smile 
PM MAIL   Вверх
larinva
Дата 4.4.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



есть кто живой  smile 
PM MAIL   Вверх
bilbobagginz
Дата 4.4.2011, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



для начала скрип писАть переставай. начинай программы.
есть модуль psutil
а для многозадачности есть потоки, процессы... 




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
larinva
Дата 5.4.2011, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



системным администратором работаю, поэтому пока только скрипты, а за ответ спасибо!!!
PM MAIL   Вверх
bilbobagginz
Дата 6.4.2011, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



Цитата(larinva @  5.4.2011,  06:25 Найти цитируемый пост)
системным администратором работаю, поэтому пока только скрипты

отмазка не засчитана.
smile
скрипт - это тоже программа. и относиться надо соответственно - планировка, организация, и ревью и т.д.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
larinva
Дата 7.4.2011, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



точнее, что не так в моем скрипте?

Это сообщение отредактировал(а) larinva - 7.4.2011, 08:01
PM MAIL   Вверх
alexvs11
Дата 7.4.2011, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: нет
Всего: 10



Цитата(larinva @  4.4.2011,  10:06 Найти цитируемый пост)
Пишу скрип который отслеживает работу нужных мне процессов, так вот столкнулся с такой проблемой, а как реализовать с несколькими процессами.

1. что значит несколько процессов? если для например bash и sh - почему не вызвать два раза для разных (цикл типо)
2. почему не использовать pgrep?

PM MAIL   Вверх
larinva
Дата 8.4.2011, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



alexvs11, чем же в данной ситуацииps хуже pgrep, тут уж дело вкуса кто к чему привык. Зачем два цикла если можно сделать в одном smile 
Для тех кому не понятно 
Цитата

1. что значит несколько процессов?
 
загляните сюда http://www.freebsd.org/doc/ru/books/handbo...-processes.html

Это сообщение отредактировал(а) larinva - 8.4.2011, 07:47
PM MAIL   Вверх
alexvs11
Дата 8.4.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: нет
Всего: 10



Цитата(larinva @  8.4.2011,  07:35 Найти цитируемый пост)
загляните сюда http://www.freebsd.org/doc/ru/books/handbo...-processes.html

спасибо, ну раз вы такой продвинутый юзер, то советы должны тут вы давать smile 
PM MAIL   Вверх
larinva
Дата 8.4.2011, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



я вообще, то обратился сюда за советом, а не для издевок подобного рода smile 
PM MAIL   Вверх
bilbobagginz
Дата 9.4.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



с т.з. количества системных процессов psutil работает с /proc, т.е. в одном процессе python. 
это дешевле чем делать конвееры, ведь для мониторинга нередко хочется знать статус процесса, и др. данные (когда родился и т.д.).
запуск из питона такого чуда будет включать в себя: python, shell, ps, grep, cut, etc.

Добавлено @ 16:50
Цитата(larinva @  4.4.2011,  09:06 Найти цитируемый пост)
  httpd = commands.getoutput("ps ax|grep " + "httpd"

баг же. сценарий:
1. имя процесса апача: httpd.
2. имя пользователя, под которым апач бежит: httpd
3. под этим пользователем бежит какой-то долгий cron job, для анализа логов, их переноса и т.д. и в командной строке присутствует параметр httpd.

крон запускает задачу в 2:00 ночи.

в 1:59 процесс апача умер. в 2:30 твой скрипт обнаруживает процесс по формуле....
и ты не узнаешь что апач умер, пока первый пользователь не позвонит в тех-поддержку.


Это сообщение отредактировал(а) bilbobagginz - 9.4.2011, 16:51


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
larinva
Дата 13.4.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



Спасибо bilbobagginz, за подробное разъяснение, как же тогда должен выглядеть скрипт с использование psutil, если не сложно скиньте примерчик  smile 

Это сообщение отредактировал(а) larinva - 13.4.2011, 13:45
PM MAIL   Вверх
bilbobagginz
Дата 15.4.2011, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



Цитата(larinva @  13.4.2011,  12:41 Найти цитируемый пост)
как же тогда должен выглядеть скрипт с использование psutil, если не сложно скиньте примерчик

т.е. для начала - импорт модуля
Код

import psutil

для безопасности от race по процессам надо гулять при помощи psutil.process_iter()
при запросе о процессах ты получаешь элемент класса Process.
которой описывает данные о процессе из таблицы процессов.
выбор надо делать по нужным тебе параметрам, т.е. комбинации: имени пользователя и имени процесса (или другим данным, как тебе надо)
разница с грепом вопиюща: когда ты делаешь греп, то поиск идет по всем словам строки.
тут у тебя полный контроль. как в бд.
напр. если тебе надо сделать "выборку" типа cmdline - запуск апача, который принадлежит www-data, то:
Код

def get_procs_by_cmd_and_user(c,u)
   result = []
   for p in psutil.process_iter():
      if p.cmdline[0] == c and p.username == u:
         result.append(p)
   return result

def get_apaches_on_debian():
   return get_procs_by_cmd_and_user('/usr/sbin/apache2', 'www-data')

def get_apaches_on_rhel():
   return get_procs_by_cmd_and_user('/usr/sbin/httpd', 'apache')

my_apaches = get_apaches_on_debian()
print my_apaches

остальное - кого убивать и т.д., это уже думай сам. читай доки функций psutil, там есть всё что тебе надо.

Это сообщение отредактировал(а) bilbobagginz - 29.4.2011, 11:14


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
larinva
Дата 18.4.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



запускаю этот скрипт в FreeBsd 8.1 выводит процессы 

Код

import psutil

names = set(x.name for x in psutil.get_process_list())
process = set(['httpd', 'squid'])
try:
    for p in process:
        if p in names:
            print names

except psutil.error.NoSuchProcess:
    pass


А если запускаю в FreeBsd6.2 то вот это 

Traceback (most recent call last):
  File "./_proc.py", line 23, in <module>
    names = set(x.name for x in psutil.get_process_list())
  File "./_proc.py", line 23, in <genexpr>
    names = set(x.name for x in psutil.get_process_list())
  File "/usr/local/lib/python2.6/site-packages/psutil/__init__.py", line 162, in name
    name = self._platform_impl.get_process_name()
  File "/usr/local/lib/python2.6/site-packages/psutil/_psbsd.py", line 72, in wrapper
    raise NoSuchProcess(self.pid, self._process_name)
psutil.error.NoSuchProcess: process no longer exists (pid=34284)

подскажите что нужно сделать чтобы от этого избавиться 

PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.