Портативного способа сделать это не существует. Существует программа https://github.com/nelhage/reptyr, которая может делать это в Linux (, она использует ptrace и вставляет все системные вызовы ), но я не знаю, насколько она надежна и поддерживается ли она до сих пор. YMMV.
Я бы предложил следующую команду:
watch -d "ls -lt /var/log/**/* | head"
watch
запускает следующую команду по умолчанию каждые 2 секунды. Флаг -d
выделяет различия после каждого выполнения.
ls -lt
перечисляет файлы в соответствии с датой их последнего изменения (сначала самые новые ), **/*
представляет собой глобус для рекурсивного поиска всех файлов.
Наконец, head
используется для вывода только первых 10 строк.
Вы можете найти недавно обновленные файлы в вашей системе, используя что-то вроде
find / -type f -newermt '-5 minutes'`
Вы можете комбинировать это с отображением размера:
find / -type f -newermt '-5 minutes' -exec stat -c '%10s %n' {} + `
как root сделать crontab -e
и сделайте что-то вроде
30 * * * * * /root/checkmydiskspace.sh
, который будет запускать скрипт bash /root/checkmydiskspace.sh
каждые полчаса, который вам нужно создать. Посмотрите crontab и решите, нужно ли вам проверять чаще.
Этот сценарий будет таким, и он обязательно выведет информацию, чтобы помочь вам определить, где место на диске со временем расходуется.
#!/bin/bash
now=$(date '+%Y-%m-%d-%H:%M')
filename=wheremydiskspacegone_$now.log
du -sh /* > /root/$filename
Кроме того,chmod 744 /root/checkmydiskspace.sh
просмотрите созданные файлы журналов, узнайте, где что происходит, затем измените du -sh /*
, например, на du -sh /usr/*
; пройдите в подпапки, где du
показывает больше всего используемого места.
Конечно, вы можете просто выполнить du -sh /*
заранее и посмотреть, в какой папке больше всего вещей, и это, вероятно, виновник. Но со всеми файлами журналов, каждые X минут или сколько угодно, у вас есть все необходимое, чтобы сделать вывод, что конкретно происходит и где. Тогда нужно будет определить, какая программа или процесс вызывает это.