Для давно запущенных процессов иногда полезно знать, какой я использую следующее:
ps
, чтобы найти идентификатор процесса запущенной программы (PID
ниже);используйте lsof
, чтобы найти файл, в который записывается вывод:
lsof -p PID
В выводе найдите строки 1u
и 2u
под заголовком столбца FD
.
Эти строки скажут вам, в какие временные файлы попадает вывод процесса
перед отправкой по почте. Обычно, для at
, файл
расположен в /var/spool/cron/atjobs/
. Наконец, отобразите этот файл
и вы увидите вывод вашего процесса (текущий).
Команда 'ls' несколько творчески относится к временным меткам - поэтому их разбор может стать проблемой. Вероятно, было бы гораздо проще реализовать это в языке, реализующем stat(). В некоторых версиях Unix есть командная строка stat - на соседнем ящике RH:
find ${BASEDIR} -type f -exec stat --format="%y %b %n" {} \; | sort | less
Но она будет работать как собака при большом количестве файлов.
В документации к GNU awk есть пример расширения, предоставляющего функции файловой системы, но вам придется проделать некоторую работу по его созданию и поддержке.
Написание программы с нуля на PHP, C или Perl (или go, ruby или многих других языках) будет несложным, но выходит за рамки данной статьи.
С помощью инструментов GNU и rsync
вы могли бы сделать:
export LC_ALL=C # force tools to regard those file paths as arrays
# of bytes (as they are in effect) and not do fancy
# sorting (and use English for error/warning messages
# as an undesired side effect).
find . -type f -printf '%T@/%s/%p\0' | # print mtime/size/path
sort -zn | # numerical sort, oldest first
awk -v RS='\0' -v ORS='\0' -F / -v max=50e12 '
{total_size += $2}
total_size > max {exit}
{
sub("^[^/]*/[^/]*/", "") # remove mtime/size/
print # path
}' |
rsync -nv -aHAX0 --files-from=- --remove-source-files . /dest/dir/
(не проверено. -n
- для пробного запуска. Удалите, если все устраивает ).
Обратите внимание, что мы вычисляем совокупный размер файла на основе размеров файлов (% s
, замените на % b
для использования диска в секторах (и измените на ] total_size + = $ 2 * 512
) и игнорирование жестких ссылок. Эти файлы при копировании в целевую файловую систему вместе с каталогами, которые их содержат, вероятно, в конечном итоге будут занимать более 50 ТБ (если нет сжатия файловой системы или дедупликации. в игре).