Не удалось выполнить процесс потомок xterm нет такого файла или каталога

Обновлено: 29.06.2024

в PHP скриптах, будь то вызов include() , require() , fopen() , или их производные, такие как include_once , require_once , или даже move_uploaded_file() , часто возникает ошибка или предупреждение:

не удалось открыть поток : нет такого файла или каталога.

что такое хороший процесс, чтобы быстро найти первопричину проблемы?

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

давайте рассмотрим, что мы устраняем неполадки в следующей строке:

1. Проверьте путь к файлу для опечаток

или переместить все вызывается require* или include* в свою собственную переменную, повторите ее, скопируйте и попробуйте получить доступ к ней с терминала:

затем в терминале:

2. Убедитесь, что путь к файлу верен относительно относительного и абсолютного пути

  • если он начинается с косой черты"/", то это не относится к корню папки вашего сайта( корню документа), а к корню ваш сервер.
    • например, каталог вашего сайта может быть /users/tony/htdocs
    • таким образом, не относительно пути корня вашего сайта или файла, в котором вы находитесь набрав
    • по этой причине, всегда используйте абсолютные пути к файлам

    чтобы сделать ваш скрипт надежным, если вы перемещаете вещи, все еще генерируя абсолютный путь во время выполнения, у вас есть 2 варианта:

      использовать require __DIR__ . "/relative/path/from/current/file" . The __DIR__ магической константы возвращает каталог текущего файла.

    определение SITE_ROOT константы себе :

      в корневом каталоге вашего сайта создайте файл, например config.php

    на config.php пишите

    в каждом файле, где вы хотите ссылаться на корневую папку сайта, включите config.php , а затем использовать SITE_ROOT константы везде, где вам нравится :

    эти 2 практики также делают ваше приложение более портативным, потому что оно не полагается на ini такие параметры, как путь включения.

    3. Проверьте свой путь включения

    другой способ включить файлы, ни относительно, ни чисто абсолютно, - это полагаться на включить путь. Это часто имеет место для библиотек или фреймворков, таких как Zend framework.

    такое включение будет выглядеть так:

    в этом случае вы захотите убедиться, что папка, в которой находится "Zend", является частью пути включения.

    вы можете проверить пути с :

    вы можете добавить в папку с :

    4. Проверьте, что ваш сервер имеет доступ к этому файлу

    возможно, что в целом пользователь, выполняющий серверный процесс (Apache или php), просто не имеет разрешения на чтение или запись в этот файл.

    чтобы проверить под каким пользователем запущен сервер можно использовать posix_getpwuid :

    чтобы узнать разрешения на файл, введите в терминале следующую команду:

    5. Проверьте настройки PHP

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

    3 установки смогли быть уместны :

    1. функции
      • если это установлено, PHP не сможет получить доступ к любому файлу за пределами указанного каталога (даже через символическую ссылку).
      • однако поведение по умолчанию для него не должно быть установлено, и в этом случае нет никаких ограничений
      • это можно проверить, позвонив phpinfo() и с помощью ini_get("open_basedir")
      • вы можете изменить настройки, либо путем редактирования РНР.ini-файл или ваш httpd.файл conf
    2. безопасный режим
      • если это включено, могут применяться ограничения. Однако это было удалено в PHP 5.4. Если вы все еще находитесь в версии, поддерживающей безопасный режим обновления до версии PHP, которая все еще поддерживается.
    3. опция allow_url_fopen и allow_url_include
      • это относится только к включению или открытие файлов через сетевой процесс, такой как http:// not при попытке включить файлы в локальную файловую систему
      • это можно проверить с помощью ini_get("allow_url_include") и ini_set("allow_url_include", "1")

    если ни один из вышеперечисленных не позволяет диагностировать проблему, вот некоторые специальные ситуации, которые могут произойти:

    1. Включение библиотеки, опираясь на путь

    может случиться так, что вы включаете библиотеку, например Zend framework, используя относительный или абсолютный путь. Например :

    но тогда вы все равно получите ту же ошибку.

    это может произойти потому, что файл, который вы (успешно) включили, имеет сам оператор include для другого файла, и этот второй оператор include предполагает, что вы добавили путь этой библиотеки к пути include.

    для например, файл Zend framework, упомянутый ранее, может иметь следующее значение:

    который не является включением ни относительным путем, ни абсолютным путем. Предполагается, что каталог Zend framework добавлен в путь включения.

    в таком случае, единственным практическим решением является добавление в каталог к вашему пути.

    2. В SELinux

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

    чтобы проверить, включен ли SELinux в вашей системе запустите sestatus команда в терминале. Если команда не существует, то SELinux не в системе. Если он существует, то он должен сказать вам, является ли он принудительным или нет.

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

    если у вас больше нет проблемы с выключенным SELinux, то это является основной причиной.

    решить, вам придется настроить SELinux соответственно.

    необходимы следующие типы контекста:

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

    3. В Symfony

    если вы используете Symfony и испытываете эту ошибку при загрузке на сервер, то может быть, что кэш приложения не был сброшен, либо потому что app/cache был загружен, или этот кэш не был очищенный.

    4. Не символы ACSII внутри Zip-файла

    по-видимому, эта ошибка может произойти и при вызове zip->close() когда некоторые файлы внутри zip имеют символы не ASCII в их имени файла, такие как "é".

    потенциальным решением является обертывание имени файла в utf8_decode() перед созданием целевой файл.

    кредиты Фран Кано для определения и предложения решения этой проблемы

    чтобы добавить к (действительно хорошему) существующему ответу

    попросите администратора сервера ознакомиться с руководством по использованию хостинга и веб-сервера.

    много раз люди будут решать проблему разрешений, делая следующее (пример Linux)

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

    что вам нужно сделать, это определить пользователя (ов), которые нуждаются в доступе и дают только те им доступ. Как только вы узнаете, какие пользователи нуждаются в доступе, вы захотите убедиться, что

    этот пользователь владеет файлом и, возможно, родительский каталог (особенно родительский каталог, если вы хотите записать файлы). В большинстве виртуального хостинга, это не будет проблемой, потому что ваш пользователь должен иметь все файлы под корень. Пример Linux показан ниже

    пользователь, и только пользователь, иметь доступ. В Linux хорошей практикой было бы chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но каждый может прочитать)

    $ python3.6 --version результат: Python 3.6.3
    затем.
    думаю здесь сделал ошибку, эту команду не нужно было вводить, результат:

    $ update-alternatives --config python
    результат: Есть только одна альтернатива в группе ссылок python (предоставляющая /usr/bin/python): /usr/bin/python2.7
    Настраивать нечего.

    $ update-alternatives --config python3
    результат:
    Есть 2 варианта для альтернативы python3 (предоставляет /usr/bin/python3).
    Выбор Путь Приор Состояние
    ------------------------------------------------------------
    * 0 /usr/bin/python3.6 3 автоматический режим
    1 /usr/bin/python3.5 2 ручной режим
    2 /usr/bin/python3.6 3 ручной режим
    Press to keep the current choice[*], or type selection number: 0

    После всех этих шаманств, начались чудеса :)

    $ python --version
    получаю: bash: /usr/lib/command-not-found: /usr/bin/python3: плохой интерпретатор: Нет такого файла или каталога

    $ python2 --version возвращает: Python 2.7.12

    $ python3 --version возвращает: bash: /usr/lib/command-not-found: /usr/bin/python3: плохой интерпретатор: Нет такого файла или каталога

    $ python3.5 --version возвращает: Python 3.5.2

    $ python3.6 --version возвращает: Python 3.6.3

    перестал запускаться gnome-terminal назначенный на Alt+T, возвращает: не удалось выполнить процесс-потомок "/usr/bin/gnome-terminal" (нет такого файла или каталога), но при этом запускается gnome-terminal.real

    при запуске графического окна "Обновление приложений", выдает ошибку: не удалось выполнить процесс-потомок "/usr/bin/update-manager" (нет такого файла или каталога), но при этом sudo apt update и sudo apt upgrade работают,
    при запуске графического окна "Программы и обновления", выдает ошибку: не удалось выполнить процесс-потомок "/usr/bin/software-properties-gtk" (нет такого файла или каталога).

    lsb_release
    возвращает: bash: /usr/bin/lsb_release: /usr/bin/python3: плохой интерпретатор: Нет такого файла или каталога
    lsb_release -а , тоже самое

    в PHP скриптах, будь то вызов include() , require() , fopen() , или их производные, такие как include_once , require_once , или даже move_uploaded_file() , часто возникает ошибка или предупреждение:

    не удалось открыть поток : нет такого файла или каталога.

    что такое хороший процесс, чтобы быстро найти первопричину проблемы?

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

    давайте рассмотрим, что мы устраняем неполадки в следующей строке:

    1. Проверьте путь к файлу для опечаток

    или переместить все вызывается require* или include* в свою собственную переменную, повторите ее, скопируйте и попробуйте получить доступ к ней с терминала:

    затем в терминале:

    2. Убедитесь, что путь к файлу верен относительно относительного и абсолютного пути

    • если он начинается с косой черты"/", то это не относится к корню папки вашего сайта( корню документа), а к корню ваш сервер.
      • например, каталог вашего сайта может быть /users/tony/htdocs
      • таким образом, не относительно пути корня вашего сайта или файла, в котором вы находитесь набрав
      • по этой причине, всегда используйте абсолютные пути к файлам

      чтобы сделать ваш скрипт надежным, если вы перемещаете вещи, все еще генерируя абсолютный путь во время выполнения, у вас есть 2 варианта:

        использовать require __DIR__ . "/relative/path/from/current/file" . The __DIR__ магической константы возвращает каталог текущего файла.

      определение SITE_ROOT константы себе :

        в корневом каталоге вашего сайта создайте файл, например config.php

      на config.php пишите

      в каждом файле, где вы хотите ссылаться на корневую папку сайта, включите config.php , а затем использовать SITE_ROOT константы везде, где вам нравится :

      эти 2 практики также делают ваше приложение более портативным, потому что оно не полагается на ini такие параметры, как путь включения.

      3. Проверьте свой путь включения

      другой способ включить файлы, ни относительно, ни чисто абсолютно, - это полагаться на включить путь. Это часто имеет место для библиотек или фреймворков, таких как Zend framework.

      такое включение будет выглядеть так:

      в этом случае вы захотите убедиться, что папка, в которой находится "Zend", является частью пути включения.

      вы можете проверить пути с :

      вы можете добавить в папку с :

      4. Проверьте, что ваш сервер имеет доступ к этому файлу

      возможно, что в целом пользователь, выполняющий серверный процесс (Apache или php), просто не имеет разрешения на чтение или запись в этот файл.

      чтобы проверить под каким пользователем запущен сервер можно использовать posix_getpwuid :

      чтобы узнать разрешения на файл, введите в терминале следующую команду:

      5. Проверьте настройки PHP

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

      3 установки смогли быть уместны :

      1. функции
        • если это установлено, PHP не сможет получить доступ к любому файлу за пределами указанного каталога (даже через символическую ссылку).
        • однако поведение по умолчанию для него не должно быть установлено, и в этом случае нет никаких ограничений
        • это можно проверить, позвонив phpinfo() и с помощью ini_get("open_basedir")
        • вы можете изменить настройки, либо путем редактирования РНР.ini-файл или ваш httpd.файл conf
      2. безопасный режим
        • если это включено, могут применяться ограничения. Однако это было удалено в PHP 5.4. Если вы все еще находитесь в версии, поддерживающей безопасный режим обновления до версии PHP, которая все еще поддерживается.
      3. опция allow_url_fopen и allow_url_include
        • это относится только к включению или открытие файлов через сетевой процесс, такой как http:// not при попытке включить файлы в локальную файловую систему
        • это можно проверить с помощью ini_get("allow_url_include") и ini_set("allow_url_include", "1")

      если ни один из вышеперечисленных не позволяет диагностировать проблему, вот некоторые специальные ситуации, которые могут произойти:

      1. Включение библиотеки, опираясь на путь

      может случиться так, что вы включаете библиотеку, например Zend framework, используя относительный или абсолютный путь. Например :

      но тогда вы все равно получите ту же ошибку.

      это может произойти потому, что файл, который вы (успешно) включили, имеет сам оператор include для другого файла, и этот второй оператор include предполагает, что вы добавили путь этой библиотеки к пути include.

      для например, файл Zend framework, упомянутый ранее, может иметь следующее значение:

      который не является включением ни относительным путем, ни абсолютным путем. Предполагается, что каталог Zend framework добавлен в путь включения.

      в таком случае, единственным практическим решением является добавление в каталог к вашему пути.

      2. В SELinux

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

      чтобы проверить, включен ли SELinux в вашей системе запустите sestatus команда в терминале. Если команда не существует, то SELinux не в системе. Если он существует, то он должен сказать вам, является ли он принудительным или нет.

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

      если у вас больше нет проблемы с выключенным SELinux, то это является основной причиной.

      решить, вам придется настроить SELinux соответственно.

      необходимы следующие типы контекста:

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

      3. В Symfony

      если вы используете Symfony и испытываете эту ошибку при загрузке на сервер, то может быть, что кэш приложения не был сброшен, либо потому что app/cache был загружен, или этот кэш не был очищенный.

      4. Не символы ACSII внутри Zip-файла

      по-видимому, эта ошибка может произойти и при вызове zip->close() когда некоторые файлы внутри zip имеют символы не ASCII в их имени файла, такие как "é".

      потенциальным решением является обертывание имени файла в utf8_decode() перед созданием целевой файл.

      кредиты Фран Кано для определения и предложения решения этой проблемы

      чтобы добавить к (действительно хорошему) существующему ответу

      попросите администратора сервера ознакомиться с руководством по использованию хостинга и веб-сервера.

      много раз люди будут решать проблему разрешений, делая следующее (пример Linux)

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

      что вам нужно сделать, это определить пользователя (ов), которые нуждаются в доступе и дают только те им доступ. Как только вы узнаете, какие пользователи нуждаются в доступе, вы захотите убедиться, что

      этот пользователь владеет файлом и, возможно, родительский каталог (особенно родительский каталог, если вы хотите записать файлы). В большинстве виртуального хостинга, это не будет проблемой, потому что ваш пользователь должен иметь все файлы под корень. Пример Linux показан ниже

      пользователь, и только пользователь, иметь доступ. В Linux хорошей практикой было бы chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но каждый может прочитать)

      После перезагрузки моего Mac я получил ужасную ошибку Postgres:

      Причина этого в том, что мой macbook полностью застыл из-за несвязанной проблемы, и мне пришлось сделать жесткую перезагрузку с помощью кнопки питания. После перезагрузки я не смог запустить Postgres из-за этой ошибки.

      ОТВЕТЫ

      Ответ 1

      ПРЕДУПРЕЖДЕНИЕ: Если вы удалите postmaster.pid, не убедившись, что на самом деле нет процессов postgres , которые могут работать с вами, может навсегда повредить вашу базу данных. (PostgreSQL должен удалить его автоматически, если postmaster завершил.).

      РЕШЕНИЕ: Это устранило проблему - я удалил этот файл, а потом все сработало!

      и вот как я понял, почему это нужно удалить.

      Я использовал следующую команду, чтобы проверить, были ли запущены процессы PG. для меня их не было, я даже не мог запустить PG-сервер:

      это не показало ничего после поиска на моем компьютере, поэтому файл не существовал, но, очевидно, psql "хотел" или "думал, что он там".

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

      в конце журнала сервера я вижу следующую ошибку:

      Ответ 2

      Ничто из вышеперечисленного не помогло мне. Мне пришлось переустановить Postgres следующим образом:

      Удалить все папки Postgres:

      • rm -r/usr/local/var/postgres
      • rm -r/Users/<username>/Library/Application\ Support/Postgres

      Переустановите postgresql с помощью brew: brew install postgresql

      Ответ 3

      Если вы используете MacOS и установили postgres через homebrew, попробуйте перезапустить его с

      Если вы используете Ubuntu, вы можете перезапустить его любой из этих команд

      Ответ 4

      Возможно, это не связано, но похожая ошибка появляется при обновлении postgres до основной версии с использованием brew ; используя brew info postgresql обнаружил, что это помогло:

      Ответ 5

      если ваш postmaster.pid ушел, и вы не можете перезапустить или что-то еще, сделайте следующее:

      pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

      как объяснено здесь изначально

      Ответ 6

      Привет, мир:)
      Лучшим, но странным для меня способом было сделать следующее.

      1) Загрузите postgres93.app или другую версию. Добавьте это приложение в папку /Applications/.

      2) Добавьте строку (команду) в файл .bash_profile (который находится в моем домашнем каталоге):

      Это значение PATH для psql из Postgres93.app . Строка (команда) запускается каждый раз при запуске консоли.

      3) Запустите папку Postgres93.app из /Applications/ . Он запускает локальный сервер (порт "5432", а хост - "localhost" ).

      4) После всех этих манипуляций я был рад запустить $ createuser -SRDP user_name и другие команды и убедиться, что он сработает! Postgres93.app можно запускать при каждом запуске системы.

      5) Также, если вы хотите графически увидеть свои базы данных, вы должны установить PG Commander.app . Это хороший способ увидеть вашу базу данных postgres как симпатичные таблицы данных.

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

      Ответ 7

      1) Если у вас есть какой-то сбой, удаление файла /usr/local/var/postgres/postmaster.pid, возможно, требуется, поскольку postgres, возможно, не справились с ним должным образом. Но убедитесь, что процесс не запущен.

      3) Еще одно решение - удалить и переустановить камень. Возможно, потребуется обновление brew.

      Если вы наткнетесь на этот пост, если вы можете определить один из источников, вы сэкономите время.

      Ответ 8

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

      Ответ 9

      У меня возникла аналогичная проблема. Я решил эту проблему, как показано ниже.

      На самом деле процесс postgres мертв, чтобы увидеть статус postgres, выполните следующую команду

      Будет сказано, что процесс мертв. Просто запустите процесс

      Ответ 10

      Ответ 11

      Моя проблема закончилась тем, что я использовал Gas Mask (файловый менеджер хостов для Mac), и у меня не было записи для localhost в файле hosts, который я использовал.

      И это решило мою проблему.

      Ответ 12

      Причин этой ошибки много, поэтому сначала найдите файл журнала и проверьте его на наличие улик. Это может быть в /usr/local/var/log/postgres.log или /usr/local/var/postgres/server.log или, возможно, в другом месте. Если вы установили Homebrew, вы можете найти его в

      Ответ 13

      Я не совсем уверен, почему, но моя установка Postgres была немного испорчена, и некоторые файлы были удалены, что приводит к ошибке OP.

      Я просмотрел документацию postgres и обнаружил, что мой файл /usr/local/var/postgres был полностью пустым. Итак, я запустил следующее:

      Кажется, что некоторые конфигурации имели место с этой командой.

      Затем он попросил меня запустить это:

      И это говорит мне, что файл postmaster.pid уже существует.

      Мне просто нужно было знать, сможет ли brew подобрать конфиги, которые я только что запустил, поэтому я проверил это.

      Это показал мне файл postmaster.pid. Затем я сделал brew services stop postgresql , и файл postmaster.pid исчез. Затем я сделал brew services start postgresql , и VIOLA, файл появился снова.

      Затем я запустил свое приложение, которое фактически нашло сервер, однако мои базы данных, похоже, исчезли.

      Хотя я знаю, что они могут вообще не исчезнуть - новая инициализация, которую я сделал, могла создать новую data_area, а на старую не указывать. Я должен был бы посмотреть, где это и указать на это, или просто снова создать свои базы данных.

      Надеюсь это поможет! Чтение документации Postgres мне очень помогло. Ненавижу читать ответы типа "Вставь, это работает!" потому что я не знаю, что, черт возьми, происходит и почему.

      Ответ 14

      Я была такая же проблема. В большинстве случаев проблема заключается в том, что существует оставшийся файл

      который работает для большинства людей, но мой случай был другим - я пытался погуглить эту проблему в течение последних 3 часов, удалил postresql на OSX через brew, очистил базу данных, ничего не помогло.

      Наконец, я заметил, что у меня возникла проблема с brew, которая всякий раз, когда я пытался что-либо установить, высовывалась:

      Error: Permission denied @rb_sysopen -/private/tmp/github_api_.

      или что-то вроде этого в конце установки.

      Я просто сделал sudo chmod -R 777/private/tmp и это наконец работает!

      Я записываю это, потому что это может быть решением для кого-то другого

      Ответ 15

      Мне пришлось искать этот пост несколько раз, чтобы решить эту проблему. Там есть еще одно исправление, которое также относится к аналогичным проблемам с другими запущенными программами.

      Я только что обнаружил, что вы можете использовать следующие две команды.

      Это покажет все текущие действия с их номерами pid. Когда вы найдете postgres и связанные с ним pid

      Ответ 16

      У меня возникла такая же проблема, как и моя машина ( ubuntu ) для обновления и получилась ниже ошибки:

      не удалось подключиться к серверу: такой файл или каталог не является сервером выполняется локально и принимает соединения в сокетном домене Unix "/var/run/postgresql/.s.PGSQL.5432"?

      После завершения процесса обновления, когда я перезапущу системную ошибку, ушел. И его работа как прелесть, как и раньше. Я думаю, это произошло, когда pg обновлялся, и начался другой процесс.

      Ответ 17

      SUPER NEWBIE ALERT: Я просто изучаю веб-разработку и конкретный учебник, о котором я говорил, я должен установить Postgres, но на самом деле не упоминал, что мне нужно запустить его. Как только я открыл приложение Postgres, все было в порядке и dandy.

      Ответ 18

      @Ответ Джагдиша Барабари дал мне ключ, который мне нужно было решить. Оказывается, были установлены две версии postgresql, в то время как только один был запущен. Очистка всех файлов postgresql и переустановка последней версии разрешили эту проблему для меня.

      Ответ 19

      Я удалил /usr/lib из LD_LIBRARY_PATH, и это сработало. Я работал в Dockerfile Postgres: Alpine.

      Ответ 20

      После некоторых поисков я нашел похожую проблему и простой ответ, который сработал: просто "обновите свой существующий до новой версии с помощью следующей команды":

      Читайте также: