Verzeichnis '/ var / run / screen' kann nicht erstellt werden: Berechtigung verweigert

24

Manchmal, normalerweise nach einem Absturz oder einem plötzlichen Herunterfahren, wird screender Start verweigert. Befehle wie

screen
screen -ls
screen -r
screen -d

Ergebnis in der folgenden Ausgabe

Verzeichnis '/ var / run / screen' kann nicht erstellt werden: Berechtigung verweigert

Was ist das Problem hier? Wie kann ich das beheben?

Huey
quelle

Antworten:

32

Es wurde eine Lösung gefunden, die beim Neustart kein reguläres Sudo erfordert

Aus 'Eric Z Ma' @ systutorials :

Das Verzeichnis /var/run/screen/ist das Socket-Verzeichnis für screen.

Glücklicherweise liest screen eine Umgebungsvariable SCREENDIR, um ein alternatives Socket-Verzeichnis zu erhalten.

So zu arbeiten um ihn herum, können Sie ein Verzeichnis, wie erstellen ~/.screen:

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

und exportieren Sie den SCREENDIRto-Punkt in dieses Verzeichnis:

export SCREENDIR=$HOME/.screen

Sie können diese Zeile auch in sich einfügen, ~/.bashrcdamit sie auch danach wirksam wird.

Krease
quelle
25

Dieses Problem wurde dokumentiert hier . Zusamenfassend,

/etc/rcS.d/S70screen-cleanup wird viel früher als erwartet über upstart ausgeführt und kann dieses Verzeichnis nicht ordnungsgemäß bereinigen.

Dies kann mit dem folgenden Befehl behoben werden

sudo /etc/init.d/screen-cleanup start
Huey
quelle
1
Das funktioniert, aber ich muss es bei jedem Start ausführen, sonst bekomme ich immer wieder den Fehler.
Krease
2

Ich bin auf dieses Problem gestoßen, als ich eine auf Centos / RHEL 7 basierende Distribution ausgeführt habe, und es gibt unter / etc nirgends etwas mit dem Namen "Bildschirmbereinigung".

Eine Problemumgehung, die ich gefunden habe, bestand darin, einfach zu starten sudo screenund dann sofort zu beenden.

Danach war ich in der Lage, screen ohne spezielle Rechte auszuführen, so dass es so aussieht, als würde es aufgeräumt / var / run, wenn die Chance dazu besteht.

Jay Taylor
quelle
1

Ich kann dieses Problem beheben, indem ich die folgenden Befehle ausführe.

sudo mkdir /var/run/screen
sudo chmod 777 /var/run/screen
Taichi Nakamura
quelle
1
Dies ist keine gute Lösung. Bei jedem Neustart müssen Sie dies wiederholen.
Arupgsh
0

TL; DR : Stellen Sie in Debian Stretch und höher sicher, dass systemd-tmpfiles-setup.servicedas erfolgreich gestartet wurde:

$:> 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
   ...

Wenn deaktiviert ( Loaded: ... ;disabled; ...), können Sie es mit aktivieren systemctl enable systemd-tmpfiles-setup.service. Wenn Sie screen in einem Docker-Container verwenden möchten, müssen Sie entweder systemd in Ihrem Container-Image ausführen systemctl start systemd-tmpfiles-setup.serviceoder Sie müssen /etc/init.d/screen-cleanup start( wie von Huey vorgeschlagen ) jedes Mal ausführen, nachdem Sie sich in Ihrem Container angemeldet haben.

Details: Seit Debian Stretch wird das Startskript /etc/init.d/screen-cleanupnicht mehr ausgeführt, da dieser Dienst standardmäßig maskiert ist ( /lib/systemd/system/screen-cleanup.service -> /dev/null), so dass systemd ihn ignoriert.

Stattdessen systemd-tmpfiles-setup.serviceerzeugt /run/screenbeim Booten, wie konfiguriert /usr/lib/tmpfiles.d/screen-cleanup.conf:d /run/screen 0775 root utmp

Jakob
quelle
Es sieht so aus, als würden Sie (auch) eine Prozedur vorschlagen, die das OP nach jedem Neustart (manuell) ausführen müsste. Können Sie eine dauerhafte Lösung anbieten, die nur einmal durchgeführt werden muss? Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie Ihre Antwort, um sie klarer und vollständiger zu gestalten.
Scott
@Scott systemctl enable systemd-tmpfiles-setup.service, den @Jacob vorgeschlagen hat, blieb über Neustarts hinweg bestehen.
Tagar