Невозможно создать каталог '/ var / run / screen': разрешение запрещено


26

Иногда, обычно после аварии или внезапного выключения, screenотказывается запускаться. Команды как

screen
screen -ls
screen -r
screen -d

результат в следующем выводе

Невозможно создать каталог '/ var / run / screen': разрешение запрещено

В чем здесь проблема? Как я могу это исправить?

Ответы:


34

Нашел решение, которое не требует регулярного sudo при перезагрузках

Из «Эрик З Ма» @ systutorials :

Каталог /var/run/screen/- это каталог сокетов для экрана.

К счастью, screen читает переменную окружения, SCREENDIRчтобы получить альтернативный каталог сокетов.

Чтобы обойти это, вы можете создать каталог, например ~/.screen:

mkdir ~/.screen && chmod 700 ~/.screen

и экспортируйте, SCREENDIRчтобы указать на этот каталог:

export SCREENDIR=$HOME/.screen

Вы также можете поместить эту строку в себя, ~/.bashrcчтобы она впоследствии вступила в силу.


25

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

/etc/rcS.d/S70screen-cleanup запускается через upstart намного раньше, чем ожидалось, и не может правильно очистить этот каталог.

Это можно исправить с помощью следующей команды

sudo /etc/init.d/screen-cleanup start

1
Это работает, но я должен запускать его при каждом запуске, иначе я получу ошибку снова и снова.
Krease

3

Я столкнулся с этим во время работы дистрибутива на базе Centos / RHEL 7, и в нем нет ничего с именем 'screen-cleanup' в каталоге / etc.

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

После этого я смог запустить экран без каких-либо особых привилегий, поэтому он, кажется, очищает / var / runuprorly, когда есть такая возможность.


1

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

sudo mkdir /var/run/screen
sudo chmod 777 /var/run/screen

1
Это не хорошее решение. Каждый раз, когда вы перезапускаете, вы должны повторить это.
Arupgsh

0

TL; DR : в Debian Stretch и более поздних версиях убедитесь, что systemd-tmpfiles-setup.serviceон был успешно запущен:

$:> systemctl status systemd-tmpfiles-setup.service
● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
   Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: enabled)
   Active: active (exited) since Thu 2018-06-21 19:54:06 CEST; 41min ago
   ...

Если отключено ( Loaded: ... ;disabled; ...), то вы можете включить его с помощью systemctl enable systemd-tmpfiles-setup.service. Если вы хотите использовать screen в Docker-контейнере, то вы должны либо запустить systemd в образе вашего контейнера, либо запускать systemctl start systemd-tmpfiles-setup.serviceили /etc/init.d/screen-cleanup start( как рекомендует Huey ) каждый раз после входа в ваш контейнер.

Детали: Начиная с Debian Stretch, скрипт запуска /etc/init.d/screen-cleanupне выполняется, потому что по умолчанию этот сервис маскирован ( /lib/systemd/system/screen-cleanup.service -> /dev/null), поэтому systemd игнорирует его.

Вместо этого systemd-tmpfiles-setup.serviceсоздает /run/screenпри загрузке, как настроено в /usr/lib/tmpfiles.d/screen-cleanup.conf:d /run/screen 0775 root utmp


Похоже, что вы (также) предлагаете процедуру, которую OP должен будет выполнить (вручную) после каждой перезагрузки. Можете ли вы предложить постоянное решение, которое должно быть сделано только один раз? Пожалуйста, не отвечайте в комментариях; отредактируйте свой ответ, чтобы сделать его более понятным и полным.
Скотт

@ Скотт, systemctl enable systemd-tmpfiles-setup.serviceкоторый @Jacob предложил сохранить после перезагрузки.
Тагар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.