Cannot make directory ‘/run/screen’

10 Oct

Y ahí nos quedamos. Y en parte me pasa por perezoso.

En la configuración que suelo emplear tengo dispuesto que, al entrar vía ssh a un sistema, se recupere la sesión de screen para seguir trabajando sin pausa.

De hecho la configuración es algo como:

# recover last screen session or create a new session 
if [ "$SSH_CONNECTION" ]; then 
   if [ -z "$STY" ]; then 
      exec screen -d -R 
   fi
fi

Y siempre funciona a menos que el directorio de trabajo de screen no pueda crearse porque debería haberlo hecho el sistema y no ha sido así. He buscado en la red y he encontrado una respuesta perfecta para Debian 10 de la mano de Pieter Ennes que explica todo con una claridad pasmosa.

La solución, pues, consiste en lo siguiente:

$ sudo file /lib/systemd/system/screen-cleanup.service
/lib/systemd/system/screen-cleanup.service: symbolic link to /dev/null
$ sudo rm /lib/systemd/system/screen-cleanup.service
$ sudo systemctl enable screen-cleanup.service
$ sudo systemctl start screen-cleanup.service

Esto es, si el archivo screen-cleanup.service es un enlace a /dev/null el servicio está enmascarado por systemd y no es posible habilitarlo para que se cree en el proceso de arranque. Las llamadas a systemctl sirven para asegurarse de que esto es así.

Otro detalle, obviamente, es cambiar -por si acaso- el script de arranque para que en caso de fallo de screen no termine la conexión. Eliminar la llamada a exec es un primer paso, claro, pero también se puede hacer caso de la respuesta de Krease y emplear la variable SCREENDIR.

export SCREENDIR=$HOME/.screen
if [ ! -d $SCREENDIR ]; then 
   mkdir $SCREENDIR && chmod 0700 $SCREENDIR 
fi