Различные все системы Linux

Попробуйте psacct пакет (учет GNU), это должно сделать примерно все, в чем Вы нуждаетесь, когда-то установленный и включенный (accton), затем lastcomm сохранит отчет о пользовательских процессах (см. также sa и dump-acct). Посмотрите это для ссылки: выполняемый файл журнала команд Пользователя

Вы, возможно, должны были бы обновить версию, чтобы зарегистрировать PID/PPID, видеть https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acct, иначе я подозреваю, что это занизит сведения на fork() без exec().

Обновление, Если Ваш lastcomm выводы F в 2-м столбце это означает, что процесс был ветвлением (который никогда не звонил exec() заменять себя новым процессом). Вывод dump-acct должен показать Вам PID (и PPID) в формате acct v3.

Альтернатива psacct могла бы быть новым (выход) taskstats, еще нет огромной суммы поддержки его AFAICT, посмотрите Documentation/accounting/taskstats.txt в Вашем источнике версии ядра. Это могло бы помочь получить Вас, запустил http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/, который определенный пример кода tasklogger.c, необходимо будет изменить printf() строка в функции print_delayacct2(), во-первых заменять %u с %llu для __u64 типы и во-вторых добавить поле ac_uid (и возможно ac_gid) то, что необходимо отследить пользователем. Вызовите его с чем-то как tasklogger -dl -m 0-1 (где -m 0-1 указывает на центральные процессоры 0-1). Вы будете затем рассматривать детали в реальном времени как каждый процесс выходы.

Существует также модуль жемчуга Linux::Taskstats::Read доступный на CPAN, хотя я не использовал его.

Необходимо будет обработать данные на основе меток времени, если Вы захотите количество параллельного процесса, в расчете на пользователя, это не простое, поскольку это звучит.

Обновите 2 хорошо, вещи проверить на необходимое psacct поддержка:

  1. (официальное) ядро> = 2.6.8 для поддержки учета v3 (или бэкпорт)
  2. ядро с CONFIG_BSD_PROCESS_ACCT и CONFIG_BSD_PROCESS_ACCT_V3 включенный
  3. v3 способный учет (psacct) пакет, как отмечено выше

Все вышеупомянутое должно быть верным в CentOS 6, я проверил 5.x, и это не имеет CONFIG_BSD_PROCESS_ACCT_V3=y, таким образом, необходимо было бы восстановить ядро для включения его.

Оригинал psacct-6.3.2 приблизительно 15 лет, версия Red Hat/CentOS бэкпортировала v3 и поддержку дисплея PID (я не могу протестировать его прямо сейчас, но это должно работать).

Проверять Вашу конфигурацию ядра:

zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-`uname -r`

8
22.04.2015, 10:54
2 ответа

Думаю, твоя идея не далека от решения. Чтобы очертить возможный путь: Я использую rsnapshot для резервного копирования. Он создает структуру каталога (backup-) всех или подмножества ваших файлов с точками входа (например) /backup/hourly.1/..... и /резервное копирование/hourly.0/..... , где каждая ветвь несет все данные, но использует (жесткие) ссылки для файлов, в которых не было произведено никаких изменений. Делая рекурсивный ls или find на обеих структурах и сравнивая (отсортированный, в случае нахождения) вывод покажет недостающие файлы, а проверяя счетчик ссылок (в ls -l это будет вторая колонка) покажет новые файлы (которые имеют счетчик ссылок 1). Подробнее об изменениях в файлах можно (для идентифицированных файлов) использовать обычные утилиты diff. Как уже было сказано, это набросок, потребуется некоторая работа по реализации, и могут быть непонятные причуды, так что возьмите это предложение с зерном соли

.
1
27.01.2020, 20:13

Я бы сделал это, используя rsync, как предложено в одном из комментариев. RSYNC имеет режим сухого режима прогона и функцию контрольной суммы, которую вы можете использовать для создания точного отчета о том, что изменилось.

Принимая его в дальнейшем, вы можете написать скрипт, который выполняет различие от измененных файлов, хотя вам нужно сделать его избегать двоичных файлов (не уверен, как) ..

или, вы можете взять совершенно другой подход .. используйте Git. Таким образом, в вашей системе «Base» выполните Git init в /, то после того, как вы запустите третьей стороной, вы можете просто сделать:

git status > /tmp/changed-files.txt
git diff > /tmp/changes.txt

Использование GIT даст вам довольно много гибкости. Сказав, что он может бороться по всей системе и может запутаться в / proc и т. Д. ..

0
27.01.2020, 20:13

Теги

Похожие вопросы