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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Доступ к выводимой иноформации различных процессов  (Прочитано 6576 раз)

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

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Здравствуйте!

Хочу попросить помочь мне понять, как сделать такую вещь.......

Есть машина на Ubuntu 16.04 LTS, на ней запускается некоторое количество нужного мне ПО, в фоне, плюс мои скрипты. Все это работает. Теперь я хочу сделать что-то вроде API к процессу работы всего этого комплекса, собрать в некий симпатичный мониторинг на основе web. Для этого, соответственно, мне надо периодически брать информацию из происходящих процессов. Ладно, когда дело касается моих скриптов - можно сделать, чтобы в заданные промежутки времени они сбрасывали инфу в какой-нибудь файл/базу....

А вот как быть со сторонним ПО? Оно работает, у него есть вывод в консоль, периодически, какой-нибудь информации. Вот как бы сделать так, чтобы при запуске в фоне этого ПО перенаправить его вывод куда-нибудь, чтобы на экране он не отображался.... НО! В то же время надо иметь доступ в этому выводу и еще его парсить, чтобы получать оттуда необходимую информацию для вывода в web-оснастку.....

Заранее большое спасибо!

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6691
  • 20% Cooler
    • Просмотр профиля
program >> program.log 2>&1
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
И всякий раз обращаться к этому файлу, переходя в конец? А если прога работает месяцами? А нельзя ли как-то анализировать ее текущий вывод "на лету"?

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6691
  • 20% Cooler
    • Просмотр профиля
tail program.log #последние десять строк

program 2>&1 | tee -a program.log #отображение в терминале и одновременная запись в лог

а вообще проще и правильнее использовать systemd и journalctl. Настройте юниты, и нет проблем.
https://wiki.archlinux.org/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.96.D1.83.D1.80.D0.BD.D0.B0.D0.BB
« Последнее редактирование: 20 Июня 2017, 21:46:30 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
а вообще проще и правильнее использовать systemd и journalctl. Настройте юниты, и нет проблем
Вот это мне не совсем понятно...... Допустим, есть приложение /opt/myapp/app и там же есть скрипт, который запускает приложение, передавая ему параметры start.sh
#!/bin/sh
app <arg1> <arg2>
Это приложение после запуска начинает периодически выдавать в консоль разную информацию. Я так понял, чтобы скрыть вывод в консоль, надо в конце команды запуска дописать 2>&1? А вот с помощью systemd и journal получить доступ к этой инфе для парсинга? Можно на примере? Из привиденной статьи не понял (((((

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6691
  • 20% Cooler
    • Просмотр профиля
torquemada163,
2>&1 - перенаправление STDERR в STDOUT. Выводиться будет в любом случае, либо на консоль, либо в файл (tee - для вывода в консоль и файл одновременно). Чтобы совсем-совсем ничего не выводилось, существует такая конструкция:

program > /dev/null 2>&1

По systemd:
создание юнита https://forum.ubuntu.ru/index.php?topic=287407.msg2263654#msg2263654

логи тут:
journalctl     # все логи, за всё время
journalctl -b     # все логи, но только cо времени последней загрузки
journalctl -u app     # логи юнита app за всё время
journalctl -b -u app     # логи юнита app cо времени последней загрузки


« Последнее редактирование: 21 Июня 2017, 00:39:55 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
По systemd:
создание юнита https://forum.ubuntu.ru/index.php?topic=287407.msg2263654#msg2263654

Спасибо большое! Теперь, кажется, понял.... Попутно появилось несколько вопросов:
1. Если я зарегистрирую юнит app, то как мне передавать ему параметры командной строки? Потому как периодически их приходится менять.....
2. Можно ли получить логи, как если бы что-то типа tail использовалось? Мне надо парсить не логи за период, а ситуацию, приближенную к реальному времени.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6691
  • 20% Cooler
    • Просмотр профиля
1. ExecStart=/bin/app -arg1 -arg2
2. man jounrnalctl
Цитировать
-f, --follow
           Show only the most recent journal entries, and continuously print
           new entries as they are appended to the journal.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
https://help.ubuntu.ru/wiki/screen
На мой взгляд, это совершенно не о том....

Пользователь добавил сообщение 24 Июня 2017, 21:34:29:
1. ExecStart=/bin/app -arg1 -arg2
Понял..... К сожалению, тогда не пойдет такой вариант... Аргументы командной строки менять приходится часто, это придется делать сотню юнитов на каждый вариант.
Вернемся тогда к выводу программой лога в файл. С конструкцией program >> program.log 2>&1 я понял. А можно ли как-то ограничить размер лога, скажем, десятком строк? Чтобы постоянно перезаписывался лог построчно, или еще как-то, а хранились последние сколько-то строк?
« Последнее редактирование: 24 Июня 2017, 21:34:29 от torquemada163 »

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Вы бы задачу изначальную сформулировали что ли?…
Хорошо, давайте еще раз сформулирую проблему....

Есть Ubuntu 16.04 LTS с рядом сторонних программ, которые запускаются из консоли с аргументами командной строки. Причем, периодически необходимо перезапускать данную программу с другими аргументами в командной строке. После запуска эта программа начинает в консоль выводить статистическую информацию о своей работе. Хочу сделать что-то типа API, чтобы брать эту статистику для дальнейшего представления через web. Т.е, необходимо информацию, которую выводить запущенная программа, передавать парсеру (программа на PYthon), а вывод в консоль подавить, ну чтобы не было на экране окна терминала, по которому разные циферки бегут. Не обязательно это делать в реальном времени, можно это делать это, скажем, раз в 2 минуты. Таким образом, можно так сформулировать основные моменты:

1. Перенаправить вывод программы (каждую СТРОКУ), запускаемой с аргументами командной строки, либо напрямую в парсер, либо в лог-файл.
2. Если используется лог-файл, то тогда ограничить его размер, скажем, 50 строками, ну или что-то наподобие. Система будет запускаться с флешки, так что нельзя раздувать размеры лог-файлов, чтобы место не кончилось

В принципе, примерно это же я и изложил в первом сообщении....

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
ЧТО за "ряд сторонних программ", что их постоянно надо запускать, да ещё и с разными аргументами?
Их нужно не постоянно запускать, а иногда. Хорошо, переформулируем так - есть сторонняя программа, которая запускается с аргументами командной строки. Иногда (пару раз в месяц) ее приходится перезапускать с другими аргументами, в зависимости от задачи на текущий момент.

Или вам нужно знать название конкретного ПО?
« Последнее редактирование: 25 Июня 2017, 13:44:20 от torquemada163 »

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Просто не очень понятно, если это типичная для данного ПО задача, почему до сих пор нет средств её автоматизации?
Сейчас меня забьют камнями )))) Это ПО называется Claymore's Dual Ethereum + Decred/Siacoin/Lbry/Pascal AMD+NVIDIA GPU Miner. Там просто ситуация изменчивая........

Пользователь добавил сообщение 25 Июня 2017, 21:03:41:
Можно написать враппер, всегда скидывающий результаты в лог.

И можно ограничит размер лога? Просто вывод идет постоянно, надо чтобы в этом логе была последняя инфа

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6691
  • 20% Cooler
    • Просмотр профиля
И можно ограничит размер лога

man logrotate
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн torquemada163

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Все майнеры давно автоматизированы, поищите нужный софт в интернете.
Уж поверьте мне, я знаю, насколько они автоматизированы. Если вы не следите за курсами и прибыльностью, то да, можно один раз запустить и забыть. Если следите, то частенько надо менять валюты/пулы/параметры

Я задался идеей сделать нормальный мониторинг майнеров под Линукс, этого нет. Для этого мне и необходим доступ к вывода майнеров для парсера

 

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