Укороченная версия:
Netstat работает нормально, кроме случаев, когда я перенаправляю вывод в файл в NFS.
не работает: netstat -c > /nfs/mount/file
работает: netstat > /nfs/mount/file
работает: netstat -c
работает: netstat -c > /tmp/file
Симптомы: пустой файл, сообщений об ошибках нет.
Это использует bash в Ubuntu 10.10
Более длинная версия: я работаю над проектом, который требует, чтобы мы собирали статистику iostat и netstat со всех узлов небольшого кластера (~ 32 узла) во время выполнения теста. Мы написали сценарии для запуска экземпляров iostat и netstat с соответствующими флагами на каждом узле, при этом каждый процесс записывает в файл в каталоге, хранящемся в общей папке NFS (каждое имя файла включает имя хоста, с которого было написано).
Скрипты iostat работают нормально, но мы наблюдаем проблему со скриптом netstat.
По какой-то причине, если я запускаю процесс netstat с флагом -c, обозначающим непрерывный вывод каждую секунду, и перенаправляю его в файл в каталоге NFS, создается пустой файл, и в него никогда не записывается никакой вывод.
Если я сделаю то же самое на сервере, который предоставляет хранилище NFS, записывая в тот же каталог (за исключением того, что в данном случае это локальное хранилище), тогда все будет работать нормально. Кроме того, если я пишу в локальную файловую систему на хосте, где возникают проблемы (например, /tmp/foo.txt), тогда все также в порядке.
Также стоит отметить, что если я просто запускаю netstat без флага -c и перенаправляю его в файл, хранящийся в NFS, это тоже работает.
Итак, похоже, есть что-то непонятное с флагом непрерывного вывода netstat, который взаимодействует с NFS способом, который отличается от других инструментов непрерывного вывода (например, флаг iostat "-t 10").
Все хосты в этой настройке работают под управлением ubuntu 10.10.
strace показывает, что мой netstat -c тратит много времени на разрешение имен хостов перед выводом результата - возможно, попробуйте netstat -nc > /nfs/foo
или подождите дольше, прежде чем убить его. Я не думаю, что это имеет какое-то отношение к NFS - у меня такая же долгая задержка при перенаправлении на /tmp/foo
Для определенных конфигураций NFS задержка синхронизации может быть довольно большой, и кажется, что netstat
не сбрасывает свой вывод после SIGKILL
.
Завершение процесса через 15 секунд или около того привело к пустому файлу, как вы описали. Я долго ждал (пошел за кофе), а когда вернулся netstat
записал в файл.
Можете ли вы проверить это поведение?
Как насчет этого?
script -f -c "netstat -c" /nfs/mount/file > /dev/null
Я думаю, это может сработать, хотя у меня нет удобного сервера NFS, чтобы это проверить.