![Recrear un enlace a un socket Unix con el archivo enlazado eliminado](https://rvso.com/image/747350/Recrear%20un%20enlace%20a%20un%20socket%20Unix%20con%20el%20archivo%20enlazado%20eliminado.png)
Recientemente me enfrenté a una situación específica; la búsqueda en Internet y las especificaciones de Linux no dieron una respuesta definitiva. Bueno, creo que no es posible pero tal vez conozcas el camino.
El escenario es el siguiente
/var/lib/mysql/mysql.sock creado por un proceso mysql al inicio
/var/lib/mysql/mysql.sock desaparece, por ejemplo, eliminado por alguna acción externa
ss -lpn | grep mysqld
todavía muestra este socket Unixu_str LISTEN 0 128 /var/lib/mysql/mysqld.sock -786114905 * 0 users:(("mysqld",pid=30220,fd=41))
lsof -p 30220 | grep /var/lib/mysql/mysqld.sock
muestra que un proceso está ligado a élmysqld 30220 mysql 41u unix 0xffff8800245603c0 0t0 3508852391 /var/lib/mysql/mysqld.sock
¿Es posible recrear/restaurar el archivo de socket Unix eliminado sin reiniciar el proceso principal para que los clientes aún puedan conectarse a través de este archivo de socket como antes de la eliminación?
Gracias.
Respuesta1
Puede utilizar el antiguo truco de Unix para recuperar un archivo aún abierto pero eliminado. En ese caso, hiciste la mayor parte del trabajo allí:
ss -lpn | grep mysqld
u_str LISTEN 0 128 /var/lib/mysql/mysqld.sock -786114905 * 0 users:(("mysqld",pid=30220,fd=41))
Consulta los archivos abiertos del PID, aquí, 30220:
# ls -l /proc/30220/fd
lr-x------ 1 mysql mysql 64 janv. 15 19:04 0 -> /dev/null
l-wx------ 1 mysql mysql 64 janv. 15 19:04 1 -> /var/log/mysqld.log
lrwxrwxr-- 1 mysql mysql 64 janv. 15 19:04 2 -> /var/lib/mysql/mysqld.sock (deleted)
Ahora puede /proc/30220/fd/2
volver a establecer un enlace simbólico con un nombre alternativo (sin embargo, no podrá restaurarlo con el mismo nombre).