Попробуйте 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
поддержка:
CONFIG_BSD_PROCESS_ACCT
и CONFIG_BSD_PROCESS_ACCT_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`
Думаю, твоя идея не далека от решения. Чтобы очертить возможный путь: Я использую rsnapshot
для резервного копирования. Он создает структуру каталога (backup-) всех или подмножества ваших файлов с точками входа (например) /backup/hourly.1/.....
и /резервное копирование/hourly.0/.....
, где каждая ветвь несет все данные, но использует (жесткие) ссылки для файлов, в которых не было произведено никаких изменений. Делая рекурсивный ls
или find
на обеих структурах и сравнивая (отсортированный, в случае нахождения) вывод покажет недостающие файлы, а проверяя счетчик ссылок (в ls -l
это будет вторая колонка) покажет новые файлы (которые имеют счетчик ссылок 1). Подробнее об изменениях в файлах можно (для идентифицированных файлов) использовать обычные утилиты diff
. Как уже было сказано, это набросок, потребуется некоторая работа по реализации, и могут быть непонятные причуды, так что возьмите это предложение с зерном соли
Я бы сделал это, используя rsync, как предложено в одном из комментариев. RSYNC имеет режим сухого режима прогона и функцию контрольной суммы, которую вы можете использовать для создания точного отчета о том, что изменилось.
Принимая его в дальнейшем, вы можете написать скрипт, который выполняет различие от измененных файлов, хотя вам нужно сделать его избегать двоичных файлов (не уверен, как) ..
или, вы можете взять совершенно другой подход .. используйте Git. Таким образом, в вашей системе «Base» выполните Git init в /, то после того, как вы запустите третьей стороной, вы можете просто сделать:
git status > /tmp/changed-files.txt
git diff > /tmp/changes.txt
Использование GIT даст вам довольно много гибкости. Сказав, что он может бороться по всей системе и может запутаться в / proc и т. Д. ..