无法创建目录“/var/run/screen”:权限被拒绝

Hue*_*uey 46 unix gnu-screen ubuntu

有时,通常在崩溃或突然关机后,screen拒绝启动。命令像

screen
screen -ls
screen -r
screen -d
Run Code Online (Sandbox Code Playgroud)

导致以下输出

无法创建目录“/var/run/screen”:权限被拒绝

这里有什么问题?我怎样才能解决这个问题?

Kre*_*ase 64

找到了一个在重启时不需要常规 sudo 的解决方案

来自'Eric Z Ma'@systutorials

该目录/var/run/screen/是屏幕的套接字目录。

幸运的是,屏幕读取环境变量SCREENDIR以获取替代套接字目录。

因此,要解决此问题,您可以创建一个目录,例如~/.screen

mkdir ~/.screen && chmod 700 ~/.screen
Run Code Online (Sandbox Code Playgroud)

并将SCREENDIR指向该目录的导出:

export SCREENDIR=$HOME/.screen
Run Code Online (Sandbox Code Playgroud)

你也可以把这行放到你里面,~/.bashrc这样以后也能生效。

  • 改进@blerontin答案,我的/etc/profile.d/screen.sh(由root创建和编辑)是: #!/bin/bash mkdir -p $HOME/.local/run/screen chmod 700 $HOME/.local /run/screen 导出 SCREENDIR=$HOME/.local/run/screen (4认同)
  • 在 WSL-Ubuntu 20.04 上,我通过创建包含行“export SCREENDIR=$HOME/.local/run/screen”的文件“/etc/profile.d/screen.sh”修复了此问题。这应该可以解决该计算机上所有用户的问题。 (3认同)

Hue*_*uey 35

此问题已在此处记录。简而言之,

/etc/rcS.d/S70screen-cleanup 通过 upstart 运行的时间比预期的要早得多,并且无法正确清理该目录。

可以使用以下命令修复

sudo /etc/init.d/screen-cleanup start
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但我必须在每次启动时运行它,否则我会一次又一次地得到错误。 (2认同)

小智 7

在我的例子中screen-cleanup,服务在 Debian“buster”10.4 上被屏蔽:

$ systemctl is-enabled screen-cleanup.service

masked
Run Code Online (Sandbox Code Playgroud)

$ file /lib/systemd/system/screen-cleanup.service

/lib/systemd/system/screen-cleanup.service: symbolic link to /dev/null
Run Code Online (Sandbox Code Playgroud)

这会导致以下情况:

$ systemctl enable screen-cleanup.service

Synchronizing state of screen-cleanup.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable screen-cleanup
Failed to enable unit: Unit file /lib/systemd/system/screen-cleanup.service is masked.
Run Code Online (Sandbox Code Playgroud)

下面的技巧是在每次启动时创建运行目录。/dev/null手动删除符号链接(systemctl unmask不起作用):

rm /lib/systemd/system/screen-cleanup.service
Run Code Online (Sandbox Code Playgroud)

然后启用该服务:

systemctl enable screen-cleanup.service
Run Code Online (Sandbox Code Playgroud)

并启动它:

systemctl start screen-cleanup.service
Run Code Online (Sandbox Code Playgroud)


Jay*_*lor 5

我在运行基于 Centos / RHEL 7 的发行版时遇到了这个问题,并且 /etc 下的任何地方都没有名为“screen-cleanup”的任何内容。

我发现的一个解决方法是简单地运行sudo screen然后立即退出。

之后,我能够在没有任何特殊权限的情况下运行 screen,因此,当有机会时,它似乎会适当地清理 /var/run 。