Получение нового вывода после удаления выходного файла

Можно проверить то, что смонтировано путем издания плоскости mount команда. Это также говорит Вам "исходное устройство" каждой точки монтирования.

Если Вы используете устройства в /dev/disk/by-id для монтирования тома NTFS затем у Вас будет фиксированное имя, по которому можно проверить в сценариях, в противоположность /dev/sd* имена, которые могут измениться между перезагрузками и управлять событиями подключения.

Таким образом, что-то вроде этого может проверить на присутствие подсоединенного внешнего диска в bash:

if mount | grep -q "/dev/disk/by-id/$DEVICE_WITH_NTFS_FILESYSTEM"; then
 # device is mounted
 ;; # do nothing
else
 # device is not mounted, let's mount it
 mount $DEVICE_WITH_NTFS_FILESYSTEM $MOUNT_POINT
 fi
3
21.01.2012, 02:01
2 ответа

От man gzip:

 -k, --keep        Keep (don't delete) input files during compression or
                   decompression.

Так gzip -k log.txt должен добиться цели.

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

3
27.01.2020, 21:13
  • 1
    за Ваш быстрый ответ! и да, мы - планирование реализации log4j когда-то в будущем, но на данный момент нам нужен он выполнение. Какие-либо идеи о том, как перенаправить вывод в случае, если трагедия ударяет снова? :-P –  rMaero 20.01.2012, 19:38
  • 2
    я понятия не имею, извините. Было бы интересно знать, все же. –  sr_ 20.01.2012, 20:46

gzip удаленный файл log.txt в то время как процесс Java все еще имел его открытый. Удаление файла на самом деле означает удалять название того файла. (Когда файл имеет несколько имен, он, как говорят, имеет несколько жестких ссылок.) Данные файла только удалены, когда все имена файлов были удалены, и файл не открыт никаким процессом. Таким образом после того, как файл исчез, это было все еще на диске; файл был только на самом деле удален, когда процесс Java, из которого выходят или, закрыл файл.

Обратите внимание, что процесс Java все еще пишет в теперь удаленный файл. Не имеет значения при создании нового файла с тем же именем: это - другой файл.

Если файл не имеет имени в запасе на большинстве нельдов, Вы не можете воссоздать жесткую ссылку на него, даже если файл все еще открыт. Был предложенный патч для представления a flink системный вызов, чтобы сделать это на Linux, но это было подстрелено.

Можно все еще считать содержание файла (удобно на Linux, и возможно менее удобно на большинстве нельдов). Каталог /proc/1234/fd то, где 1234 является PID процесса Java, содержит символьные ссылки на файлы, которые процесс имеет открытый. Если один из этих файлов удален, символьная ссылка свисает, но это может все еще быть открыто для чтения.

Это позволит Вам извлекать все строки журнала из процесса. Выполненный

tail -c +$(($(zcat log.txt.gz | wc -c) + 1)) -f </proc/1234/fd >more-log.txt

пока процесс Java не умер.

4
27.01.2020, 21:13

Теги

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