Пустой файл журнала во время работы процесса? - PullRequest
1 голос
/ 13 сентября 2011

Сегодня я запустил пакетный скрипт. На самом деле, он все еще работает, поэтому я надеюсь найти решение, пока не стало слишком поздно.

my_script.bat > output.log

Оказывается, этот файл журнала будет намного больше, чем я ожидал. К сожалению! Поэтому я хочу усечь это. Итак, я попробовал это, но это не удалось:

echo. > output.log
The process cannot access the file because it is being used by another process.

Э-э-э Он работает в Linux, так что я предположил, что он будет работать и в Windows. Что я могу сделать?

Я мог бы остановить свой пакетный скрипт, а затем перезапустить его с более разумным ведением журнала. Мой сценарий выглядит так:

echo "First iteration"
my_program.exe --parameters

echo "Second iteration"
my_program.exe --parameters

echo "Third iteration"
my_program.exe --parameters
...

Я не хочу kill my_program.exe, потому что он делает довольно важные вещи. Я хочу, чтобы пакетный скрипт "сломался" после того, как my_program.exe завершил работу. Я боюсь, что если я сделаю Ctrl-C, это убьет my_program.exe, что не будет хорошо.

Что я могу сделать для:

  • Усекать мой лог-файл "в полете"
  • Убить мой пакетный скрипт, оставив при этом выполняемый в данный момент процесс целым и невредимым?

Это сервер Windows 2003 SP2. Помогите! * * 1023

Ответы [ 2 ]

4 голосов
/ 13 сентября 2011

Файл открывается с помощью FILE_SHARE_READ, поэтому вы не можете удалить или обрезать его. Но вы можете сделать следующий трюк:

Это остановит cmd.exe от записи в файл журнала:

  1. Скачать Process Explorer .
  2. Запустите его.
  3. Выберите Find-> Find handle или DLL.
  4. введите имя вашего файла журнала (output.log).
  5. Его нужно найти в cmd.exe.
  6. Выберите его.
  7. Посмотрите на нижнюю панель.
  8. В этом cmd.exe будет список всех дескрипторов.
  9. Выберите и закройте ручку для вашего файла журнала.

Сценарий пойдет дальше, журнал будет остановлен, и появится сообщение «Неверный дескриптор». в консоли.

0 голосов
/ 14 сентября 2011

Достаточно просто убить пакетный скрипт, но оставьте текущий экземпляр my_program.exe запущенным.Вы можете убить соответствующий процесс cmd.exe с помощью диспетчера задач, но самое простое решение - просто переименовать пакетный файл.

...