Постгрес из оболочки сценария

Основываясь на подсказке из ответа Жиля, у меня был процесс, помеченный «Z» вверху(<defunct>в ps ), который использовал системные ресурсы, у него даже был открыт порт, который ПРОСЛУШИВАЛ, и вы могли подключиться к этому порту. Это было после выполнения kill -9. Его родителем был "1" (, т.е. init), поэтому теоретически он должен просто повториться и исчезнуть. Но нет, он торчал, хотя и не бегал, и «не умирал»

.

Так что в моем случае это был зомби, но все еще потребляющий ресурсы... FWIW.

И он не мог быть убит никаким числом kill -9х

И его родителем был init, но он не собирался (очищаться ). т.е. initбыл ребенок-зомби.

И перезагрузка не понадобилась для решения проблемы. Хотя перезагрузка «сработала бы» вокруг проблемы / ускорила выключение. Просто не грациозно, что еще было возможно.

И это был порт LISTEN, принадлежащий процессу-зомби (и несколько других портов, таких как CLOSE _Состояние WAIT, подключенное между локальным хостом и локальным хостом ). И он еще даже принимал соединения. Даже будучи зомби. Я предполагаю, что еще не удосужились очистить порты, поэтому входящие соединения по-прежнему добавлялись в журнал ожидания порта прослушивания tcp, хотя у них не было шансов быть принятыми.

Многие из вышеперечисленных заявлены как "невозможные" в различных местах в интерсетях.

Оказалось, что у меня был внутренний поток внутри него, который выполнял «системный вызов» (ioctl в этом экземпляре ), на возврат которого уходило несколько часов (это было ожидаемое поведение ). По-видимому, система не может завершить процесс «полностью», пока он не вернется из вызова ioctl, думаю, он входит в землю ядра. Через несколько часов он вернулся, все прояснилось, все розетки были автоматически закрыты и т. д., как и ожидалось. Это какое-то томительное время в камере смертников! Ядро терпеливо ждало, чтобы убить его.

Поэтому, чтобы ответить на ОП, иногда приходится ждать. Долго. Тогда убийство, наконец, возьмет.

Также проверьте dmesg, чтобы узнать, была ли паника ядра (, то есть ошибка ядра ).

1
24.04.2021, 13:59
1 ответ

Я вижу две проблемы в вашем фрагменте кода:

  1. $ownerв

    read -p "Enter owner database name : " $owner
    

    расширяет переменную owner; должно быть

    read -p "Enter owner database name : " owner
    

    без $; то же самое для $my_db;

  2. Одинарные кавычки в

    sudo -i -u postgres psql -c 'CREATE DATABASE $my_db OWNER $owner'
    

    предотвращает расширение $my_dbи $owner. Должно быть

    sudo -i -u postgres psql -c "CREATE DATABASE $my_db OWNER $owner"
    

    (обратите внимание на двойные кавычки вместо одинарных ). Полное объяснение можно найти в В чем разница между кавычками "...", '...', $'...' и $"..." в оболочке?

1
28.04.2021, 22:51

Теги

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