Frage

Gibt es eine Möglichkeit, einen Samba-Prozess zu zwingen, eine bestimmte Datei zu schließen, ohne sie zu töten?

Samba öffnet einen Prozess für jede Client-Verbindung, und manchmal sehe ich es offene Dateien viel länger hält als nötig. Normalerweise töten ich nur den Prozess, und die (Windows) Client öffnen Sie es das nächste Mal auf die Freigabe zugreifen; aber manchmal ist es aktiv andere Datei für eine lange Zeit zu lesen, und ich möchte nur ‚töten‘ eine Datei, und nicht die gesamte Verbindung.

edit: Ich habe versucht, die ‚net rpc Datei schließen‘, aber scheint nicht zu funktionieren. Jeder weiß, warum?

edit: diese die beste Erwähnung i habe etwas ähnliches gefunden. Es scheint ein Problem auf dem Win32-Client zu sein, etwas, das Microsoft-Server eine Abhilfe haben für; aber Samba nicht. Ich wünsche der net rpc file close <fileid> Befehl gearbeitet, ich werde immer wieder versuchen, um herauszufinden, warum. Ich LuckyLindy Antwort zu akzeptieren, auch wenn sie das Problem nicht lösen hat, weil es die einzige sinnvolle Maßnahme in diesem Fall ist.

War es hilfreich?

Lösung

Dies geschieht die ganze Zeit auf unseren Systemen, vor allem, wenn sie Samba aus einer Win98-Maschine anschließen. Wir gehen Sie folgendermaßen vor, es zu lösen (die Sie wahrscheinlich ähnlich sind):

  • Sie, welche Computer die Datei verwendet (das heißt lsof|grep -i <file_name>)
  • Versuchen Sie die Datei aus dem beanstandeten Computer zu öffnen, oder ob ein Prozess im Task-Manager versteckt, die wir schließen können
  • Wenn kein Glück haben die User-Exit alle wichtigen Netzwerkprogramme
  • Tötet die Samba-Prozess des Benutzers von Linux (das heißt kill -9 <pid>)

Ich wünschte, es gäbe einen besseren Weg!

Andere Tipps

Ich bin eine neue Antwort zu schaffen, da meine erste Antwort wirklich nur mehr Fragen enthalten ist, und war wirklich nicht viel Hilfe.

Nachdem ein bisschen suchen zu tun, ich habe nicht in der Lage für die neueste Version von Samba all aktuelle offene Bugs zu finden, lesen Sie bitte der Samba Bug Report Website und einen neuen Fehler erstellen. Dies ist der einfachste Weg, um jemanden zu bekommen Ideen vorzuschlagen, wie es möglicherweise zu beheben, und haben Entwickler Blick auf das Thema. LuckyLindy Kommentar links in meiner vorherigen Antwort zu sagen, dass dies die Art und Weise ist es nun seit 5 Jahren gewesen ist, auch das Projekt ist Open Source der beste Weg, etwas zu beheben, die durch die Berichterstattung es falsch ist, und oder Patches bereitstellt.

Ich habe auch eine Mailing-Liste Eintrag gefunden: Samba Dateien öffnen , schlagen sie posix locking=no in die Konfigurationsdatei hinzufügen, solange Sie über NFS ausgehändigt nicht auch die Dateien haben nicht die Datei sperren sollte in Ordnung sein, das heißt, wenn die Datei gesperrt wird gehalten wird.

Wenn Sie zu wollen, können Sie ein Programm schreiben, das ptrace verwendet und legt auf dem Programm, und es geht durch und Unlocks und schließt alle Dateien. Jedoch darüber im Klaren sein, dass dies möglicherweise Samba in einem unbekannten Zustand könnte, was noch gefährlicher sein kann.

Die Arbeit um, dass ich bereits erwähnt habe, ist in regelmäßigen Abständen neu starten Samba als Arbeit um. Ich weiß, es ist keine Lösung, aber es könnte vorübergehend arbeiten.

Dies ist wahrscheinlich hier beantwortet: Wie ein Dateideskriptor aus einem anderen Prozess in Unix-Systemen schließen

Bei einer Vermutung, ‚net rpc Datei schließen‘ wahrscheinlich nicht funktioniert, weil die Interprozess-Kommunikation zu sagen Samba die Datei schließen windet sich nicht betrachtet werden, bis die Datei, die Sie schließen möchten geschieht gelesen werden.

Wenn es keine explizite Option in Samba ist, das wäre unmöglich, von außen einen offenen Dateideskriptor mit Standard-UNIX-Schnittstellen zu schließen.

Im Allgemeinen kann man nicht mit einem Prozess Filedeskriptoren von außen einmischen. Doch als root können Sie natürlich tun, wie Sie in diesem phrack Artikel aus dem Jahr 1997 zu sehen: http://www.phrack.org/issues.html?issue=51&id=5#article - ich würde allerdings tun, dass auf einem Produktionssystem nicht empfehlen ...

Die bessere Frage wäre in diesem Fall, warum? Warum wollen Sie früh, um eine Datei zu schließen? Welchen Zweck hat es letztlich um die Datei zu schließen? Was versuchen Sie zu erreichen?

Samba stellt Befehle für die Anzeige von geöffneten Dateien und schließen sie.

Um alle geöffneten Dateien Liste:

net rpc Datei -U ADadmin % Passwort

Ersetzen Sie ADadmin und Passwort mit den Anmeldeinformationen eines AD Domain-Administrator von Windows. Dies gibt Ihnen eine Datei-ID, Benutzernamen, wer hat es offen, Lock-Status und den Dateinamen. Sie werden häufig die Ergebnisse filtern wollen, dass sie durch grep durch Rohrleitungen.

Wenn Sie eine Datei gefunden haben, die Sie schließen möchten, kopieren Sie ihre Datei-ID-Nummer und verwenden Sie diesen Befehl:

net rpc Datei schließen fileid -U ADadmin % Passwort

Ich brauchte etwas, wie dies zu erreichen, so dass ich leicht Geräte aushängen konnte ich zufällig teilen werden. Ich schrieb diesen schnellen Bash-Skript:

#!/bin/bash
PIDS_TO_CLOSE=$(smbstatus -L | tail -n-3 | grep "$1" | cut -d' ' -f1 - | sort -u | sed '/^$/$
for PID in $PIDS_TO_CLOSE; do
    kill $PID
done

Es ein einziges Argument, die Pfade zu schließen:

smbclose /media/drive

Jeder Pfad, der dieses Argument übereinstimmt (von grep) geschlossen ist, so dass Sie mit ihm ziemlich spezifisch sein sollten. (Nur Dateien geöffnet durch Samba betroffen sind.) Offensichtlich Sie root müssen Dateien, die von anderen Benutzern geöffnet zu schließen, aber es funktioniert gut für Dateien, die Sie geöffnet haben. Beachten Sie, dass wie bei jedem anderen Kraft Schließen einer Datei, einem Datenverlust kommen kann. Solange die Dateien nicht aktiv sind, soll es aber in Ordnung sein.

Es ist ziemlich hässlich, aber für meine Use-Case (Schließen ganzen Mount-Punkte), es funktioniert gut genug.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top