
私は職場で悪夢に直面しています。これから説明する業務を担当していた同僚が私にその責任を委ね、現在は組織を辞めています。私はこうした業務の経験がありません。知識不足と長い質問で申し訳ありませんが、どの情報を含めて、どの情報を省くべきかわかりません。
背景
サードパーティからデータを入手し、それを Postgres サーバーに送信してから Linux サーバーに取り込み、そこでシェル スクリプトによって変換を行います。データセットは結合され、その後、使用するデータ分析ツールに送信されます。このプロセスは cron を使用して自動化されています。
ただし、毎年、Linux サーバー上の一部のメタデータ csv ファイルを手動で更新する必要があります (これらはシェル スクリプトを使用してサードパーティのデータと結合されます)。
フォルダ構造:
以下は、Linux サーバーのフォルダー構造の外観です (PuTTY を使用してアクセス)。
- 別のプロジェクト
- 別のプロジェクト
- 私のプロジェクト
- 別のプロジェクト
~/私のプロジェクト>
- シェルスクリプト
- 調達したファイル
- メタファイル
- 結合されたファイル
~/メタファイル>
- 2019.csv
- 2020.csv
- 2021.csv
私は何をする必要がありますか
私がする必要があるのは、というファイルを追加することです2022.csvmeta_files フォルダにコピーします。ファイルはローカル システムにあります。同僚の引き継ぎ文書には、「samba 共有を使用して Linux にファイルをコピーする」とだけ書かれています。samba 共有の場所を見つけて、Windows エクスプローラーで設定しました。アドレスは次のようになります。\\smb.comp.com\prodここにはさまざまな種類のフォルダがあります。
私は、2022.csvファイルを samba 共有のどこかに置き、PuTTY を使用して Linux サーバー上でコマンドを実行します。ただし、どこに置き、どのようなコマンドを実行すればよいのかわかりません。
質問が長く、説明が長くなってしまい、再度お詫び申し上げます。2022.csv ファイルを Linux に取り込む方法についてご助言いただければ幸いです。他に必要な情報があればお知らせください。どうぞよろしくお願いいたします。
答え1
すでにSSHを使用してLinuxサーバーにアクセスしている場合は、逆にSFTP経由でLinuxサーバーに接続して直接アップロードファイル。通常、SSH を受け入れるすべてのサーバーは SFTP 接続も受け入れます。
PuTTY には コマンド
pscp
とpsftp
コマンドが付属しています (既存の SSH キーなどを使用できます)。C:\> pscp 2022.csv user@yourserver:~/my_project/meta_files/2022.csv
scp
最近の Windows バージョンには、 コマンドとコマンドを備えた OpenSSH が組み込まれていますsftp
。 使用方法は pscp/psftp に似ています。WinSCP は優れたグラフィカル SFTP クライアントですが、自動化のためのバッチ CLI モード (
winscp.com
) と .NET アセンブリも備えています。手動で GUI を使用する場合、Bitvise には SFTP もあると思います。FileZilla でもかまいません。
しかし、Linuxサーバーの場合しなければならないSMB 共有からファイルを取得し、任意の場所に配置して、Linux SMB クライアントを使用してアクセスします。たとえば、次のようなものがあります。
Samba からのコマンド
smbclient
。1 回限りのジョブには適していますが、自動化するのは困難です。$ smbclient //smb.comp.com/prod -U someuser smbclient> get 2022.csv
カーネルレベル
smb3
とcifs
マウント。自動化には適していますが、初めてセットアップするには Linux システムのルート権限が必要です。$ 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
(SMB 共有が SMB3 をサポートしていない場合は、古い
cifs
タイプを使用します。)「python-smbprotocol」モジュールを使用したカスタム Python スクリプト。自動化に適しています。
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)
(python-smbprotocolを使用してファイルをコピーするLinux cronjobがいくつかありますにWindows サーバー、そして python-pypsrp を使用してそれらの Windows システム上でコマンドをリモートで実行します。