![Erstellen Sie eine Bindung an einen Unix-Socket neu, wobei die gebundene Datei entfernt wird](https://rvso.com/image/747350/Erstellen%20Sie%20eine%20Bindung%20an%20einen%20Unix-Socket%20neu%2C%20wobei%20die%20gebundene%20Datei%20entfernt%20wird.png)
Ich war vor kurzem mit einer speziellen Situation konfrontiert. Eine Suche im Internet und in den Linux-Spezifikationen hat keine eindeutige Antwort ergeben. Nun, ich glaube, das ist nicht möglich, aber vielleicht kennen Sie den Weg.
Das Szenario ist wie folgt
/var/lib/mysql/mysql.sock wird beim Start von einem MySQL-Prozess erstellt
/var/lib/mysql/mysql.sock verschwindet, z. B. durch eine externe Aktion entfernt
ss -lpn | grep mysqld
zeigt immer noch diesen Unix-Socketu_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
zeigt an, dass ein Prozess daran gebunden istmysqld 30220 mysql 41u unix 0xffff8800245603c0 0t0 3508852391 /var/lib/mysql/mysqld.sock
Ist es möglich, die gelöschte Unix-Socket-Datei neu zu erstellen/wiederherzustellen, ohne den übergeordneten Prozess neu zu starten, sodass Clients weiterhin wie vor der Löschung über diese Socket-Datei eine Verbindung herstellen können?
Danke.
Antwort1
Sie können den alten Unix-Trick verwenden, um eine noch geöffnete, aber gelöschte Datei wiederherzustellen. In diesem Fall haben Sie den größten Teil der Arbeit bereits erledigt:
ss -lpn | grep mysqld
u_str LISTEN 0 128 /var/lib/mysql/mysqld.sock -786114905 * 0 users:(("mysqld",pid=30220,fd=41))
Überprüfen Sie die geöffneten Dateien vom PID, hier 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)
Jetzt können Sie einen symbolischen Link /proc/30220/fd/2
zu einem anderen Namen erstellen (Sie können ihn jedoch nicht auf denselben Namen wiederherstellen).