
Ich stehe vor einem Albtraum bei der Arbeit. Ein Kollege, der für das verantwortlich war, was ich unten beschreiben werde, hat mir diese Verantwortung übertragen und hat die Organisation inzwischen verlassen. Ich habe keinerlei Erfahrung mit diesen Dingen. Bitte entschuldigen Sie meinen Mangel an Wissen und meine lange Frage – ich bin mir nicht sicher, welche Informationen ich einschließen/weglassen soll.
Hintergrund
Wir beziehen einige Daten von einem Drittanbieter, senden diese an einen Postgres-Server und bringen sie dann auf einen Linux-Server, wo einige Shell-Skripte einige Transformationen durchführen. Der Datensatz wird dann kombiniert und anschließend an ein von uns verwendetes Datenanalysetool gesendet. Der Prozess wird mithilfe von Cron automatisiert.
Allerdings müssen wir jedes Jahr einige CSV-Metadatendateien auf dem Linux-Server manuell aktualisieren [diese werden mithilfe eines Shell-Skripts mit den Daten von Drittanbietern kombiniert].
Ordnerstruktur:
Unten sehen Sie, wie die Ordnerstruktur des Linux-Servers aussieht [Zugriff über PuTTY]:
- ein anderes_Projekt
- ein anderes_Projekt
- Mein Projekt
- ein anderes_Projekt
~/mein_projekt>
- Shell-Skripte
- beschaffte_Dateien
- Metadateien
- kombinierte_Dateien
~/Metadateien>
- 2019.csv
- 2020.csv
- 2021.csv
Was ich tun muss
Ich muss eine Datei hinzufügen mit dem Namen2022.csvin den Ordner meta_files. Ich habe die Datei auf meinem lokalen System. Im Übergabedokument meines Kollegen sagt er einfach, man solle „die Datei mit Samba-Freigabe nach Linux kopieren“. Ich habe den Speicherort der Samba-Freigabe gefunden und sie in meinem Windows-Explorer eingerichtet. Sie hat eine Adresse, die so aussieht:\\smb.comp.com\prod. Hier gibt es verschiedene Arten von Ordnern.
Ich vermute, ich muss die2022.csvDatei irgendwo in der Samba-Freigabe und führen Sie dann mit PuTTY einen Befehl auf dem Linux-Server aus. Ich habe jedoch keine Ahnung, wo ich sie ablegen und welchen Befehl ich ausführen soll.
Ich entschuldige mich noch einmal für eine so lange Frage und die ausführliche Beschreibung. Ich wäre für jede Hilfe, wie ich die Datei 2022.csv auf Linux bekomme, sehr dankbar. Bitte lassen Sie mich wissen, wenn ich weitere Informationen benötige. Vielen Dank.
Antwort1
Wenn Sie bereits SSH für den Zugriff auf den Linux-Server verwenden, gehen Sie umgekehrt vor – verbinden Sie sich per SFTP mit dem Linux-Server, um direkthochladendie Datei. Im Allgemeinen akzeptieren alle Server, die SSH akzeptieren, auch SFTP-Verbindungen.
PuTTY wird mit den Befehlen
pscp
und geliefertpsftp
(die Ihre vorhandenen SSH-Schlüssel und alles verwenden können).C:\> pscp 2022.csv user@yourserver:~/my_project/meta_files/2022.csv
Neuere Windows-Versionen verfügen über integriertes OpenSSH mit den Befehlen
scp
undsftp
. Ihre Verwendung ähnelt pscp/psftp.WinSCP ist ein guter grafischer SFTP-Client, verfügt aber auch über einen Batch-CLI-Modus (
winscp.com
) und eine .NET-Assembly zur Automatisierung.Für die manuelle GUI-Nutzung hat Bitvise, glaube ich, auch SFTP. FileZilla geht auch.
Aber wenn der Linux-ServermussZiehen Sie die Datei aus der SMB-Freigabe – legen Sie sie an einem beliebigen Ort ab und verwenden Sie dann einen Linux-SMB-Client, um darauf zuzugreifen. Es gibt mehrere, zum Beispiel:
Der
smbclient
Befehl aus Samba. Gut für einmalige Jobs, aber unangenehm zu automatisieren:$ smbclient //smb.comp.com/prod -U someuser smbclient> get 2022.csv
Auf Kernelebene
smb3
undcifs
Mounts. Gute Wahl für die Automatisierung, erfordert jedoch Root-Berechtigungen auf dem Linux-System, um es zum ersten Mal einzurichten.$ sudo mount -t smb3 //smb.comp.com/prod /mnt/thesmbserver [options...] $ cp -av /mnt/thesmbserver/2022.csv ~/my_project/meta_files/ $ sudo umount /mnt/thesmbserver
(Wenn die SMB-Freigabe SMB3 nicht unterstützt, verwenden Sie den älteren
cifs
Typ.)Ein benutzerdefiniertes Python-Skript mit dem Modul „python-smbprotocol“. Gut für die Automatisierung:
import os import shutil import smbclient import time thisyear = time.strftime("%Y") remote = r"\\smb.comp.com\prod\%s.csv" % thisyear local = os.path.expanduser("~/my_project/meta_files/%s.csv" % thisyear) with smbclient.open_file(remote, "rb") as remote_fh: with open(local, "wb") as local_fh: shutil.copyfileobj(remote_fh, local_fh)
(Wir haben mehrere Linux-Cronjobs, die python-smbprotocol zum Kopieren von Dateien verwendenZuWindows-Server und dann python-pypsrp, um Befehle remote auf diesen Windows-Systemen auszuführen.)