Tidak dapat membuat direktori '/ var / run / screen': Izin ditolak

26

Kadang-kadang, biasanya setelah crash atau shutdown mendadak, screenmenolak untuk memulai. Perintah suka

screen
screen -ls
screen -r
screen -d

menghasilkan output berikut

Tidak dapat membuat direktori '/ var / run / screen': Izin ditolak

Apa masalahnya di sini? Bagaimana saya bisa memperbaikinya?

Kwik
sumber

Jawaban:

34

Menemukan solusi yang tidak memerlukan sudo reguler di restart

Dari 'Eric Z Ma' @ systutorials :

Direktori /var/run/screen/adalah direktori soket untuk layar.

Untungnya, layar membaca variabel lingkungan SCREENDIRuntuk mendapatkan direktori socket alternatif.

Jadi untuk mengatasinya, Anda dapat membuat direktori, seperti ~/.screen:

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

dan ekspor SCREENDIRke arahkan ke direktori itu:

export SCREENDIR=$HOME/.screen

Anda juga dapat memasukkan baris ini ke dalam diri Anda ~/.bashrcsehingga juga akan berlaku setelahnya.

Krease
sumber
25

Masalah ini telah didokumentasikan di sini . Pendeknya,

/etc/rcS.d/S70screen-cleanup berjalan melalui pemula jauh lebih awal daripada yang diharapkan telah berjalan, dan gagal membersihkan direktori itu dengan benar.

Itu dapat diperbaiki dengan perintah berikut

sudo /etc/init.d/screen-cleanup start
Kwik
sumber
1
Ini berfungsi, tapi saya harus menjalankannya di setiap startup, kalau tidak saya akan mendapatkan kesalahan lagi dan lagi.
Krease
3

Saya mengalami ini ketika menjalankan distro berbasis Centos / RHEL 7, dan tidak ada yang bernama 'pembersih layar' di mana saja di bawah / etc.

Solusi yang saya temukan adalah menjalankannya sudo screendan kemudian segera keluar dari sana.

Setelah itu saya bisa menjalankan layar tanpa hak istimewa, jadi sepertinya membersihkan / var / menjalankan dengan tepat ketika diberi kesempatan.

Jay Taylor
sumber
1

Saya dapat memperbaiki masalah ini dengan menjalankan perintah berikut.

sudo mkdir /var/run/screen
sudo chmod 777 /var/run/screen
Taichi Nakamura
sumber
1
Ini bukan solusi yang baik. Setiap kali Anda me-restart Anda harus mengulang ini.
arupgsh
0

TL; DR : Di Debian Stretch dan yang lebih baru, pastikan systemd-tmpfiles-setup.servicesudah berhasil dimulai:

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

Jika dinonaktifkan ( Loaded: ... ;disabled; ...) maka Anda mungkin ingin mengaktifkannya dengan systemctl enable systemd-tmpfiles-setup.service. Jika Anda ingin menggunakan layar dalam wadah buruh pelabuhan maka Anda harus menjalankan systemd dalam gambar wadah Anda atau Anda harus menjalankan systemctl start systemd-tmpfiles-setup.serviceatau /etc/init.d/screen-cleanup start( seperti yang disarankan oleh Huey ) setiap kali setelah masuk ke wadah Anda.

Detail: Sejak Debian Stretch, skrip startup /etc/init.d/screen-cleanuptidak dieksekusi, karena secara default layanan ini di-mask ( /lib/systemd/system/screen-cleanup.service -> /dev/null), jadi systemd mengabaikannya.

Alih-alih systemd-tmpfiles-setup.servicemembuat /run/screensaat boot, seperti yang dikonfigurasi dalam /usr/lib/tmpfiles.d/screen-cleanup.conf:d /run/screen 0775 root utmp

Jakob
sumber
Sepertinya Anda (juga) menyarankan prosedur yang OP perlu lakukan (secara manual) setelah setiap reboot. Bisakah Anda menawarkan solusi permanen, yang perlu dilakukan hanya sekali? Tolong jangan menanggapi dalam komentar; edit jawaban Anda untuk membuatnya lebih jelas dan lebih lengkap.
Scott
@Scott systemctl enable systemd-tmpfiles-setup.serviceyang @Jacob menyarankan bertahan di reboot.
Tagar