質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2049閲覧

PythonでVPSサーバへFTPによるファイルアップロードの際にファイルのタイムスタンプ維持する方法

tonru

総合スコア9

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/20 10:38

編集2019/05/20 11:43

皆さん、こんにちわ。
Pythonでループプログラムの正常起動を監視するため、こんな感じでWatchdogを構成しようと考えています。

【監視構成】

①メインプログラム(WindowsPC上で動作)
・スリープタイマ(15秒毎)を入れて、ループ起動。
・メインプログラムの1ループ起動毎に、以下を設定。
-- 正常終了時:Watchdog_SILENTファイル作成
-- 異常終了時:Watchdog_SHOUTファイル作成
-- プログラム停止時:Watchdogファイル作られず

②WATCHDOG AGENTプログラム(WindowsPC上で動作)
・①で出力されたファイルを定期的(10分)にVPS上のFTPへアップロード

③WATCHDOG メインプログラム(VPSサーバ上(Linux))
・②のFTPアップロードフォルダを監視し、ファイルのタイムスタンプと現在の時間を比較し、1時間以上ファイル更新が無ければLineで通知

【質問】

この構成の場合、②でFTPアップロードしたファイルのタイムスタンプが、「ファイル作成時」ではなく、「アップロード時間」となってしまい、①のプログラム停止を検知できません。
FTPファイルアップロード時に、ファイルのタイムスタンプを更新しない方法はないのでしょうか?
また、別の方法での解決方法等のアドバイスでも結構ですので、コメントいただけると幸いです。
よろしくお願いします。

【補足】

なお、①のプログラム完了の都度、FTPアップロードでも同じことができますが、15秒毎にFTPアップロードするのも性能上よろしくないと思って②を別プログラムとして考えています。

【FTPアップロードプログラム(上述②)】

 上述の②のプログラムのFTPアップロード周辺のコードです。
pは、パラメータファイルから読み込んだ各種パラメータを保存しているクラスです。

ftp = FTP( p.FTP_URL, p.FTP_USER_ID, p.FTP_PASSWORD ) if os.path.isfile(p.WATCHDOG_SILENT_FILENAME): # ファイルの有無チェック with open(p.WATCHDOG_SILENT_FILENAME, "rb") as f: # 注意:バイナリーモード(rb)で開く必要がある ftp.storlines(p.FTP_WATCHDOG_SILENT_FILENAME, f) print("FTPアップロードOK:" + p.WATCHDOG_SILENT_FILENAME) else: print("FTPアップロード無し:" + p.WATCHDOG_SILENT_FILENAME) if os.path.isfile(p.WATCHDOG_SHOUT_FILENAME): # ファイルの有無チェック with open(p.WATCHDOG_SHOUT_FILENAME, "rb") as f: # 注意:バイナリーモード(rb)で開く必要がある ftp.storlines(p.FTP_WATCHDOG_SHOUT_FILENAME, f) print("FTPアップロードOK:" + p.WATCHDOG_SHOUT_FILENAME) else: print("FTPアップロード無し:" + p.WATCHDOG_SILENT_FILENAME)

よろしくお願いします。
以上です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/05/20 10:53

少なくとも、アップロード周りのコードがないことには答えようもないと思いますが。
tonru

2019/05/20 11:43

> y_waiwaiさん コメントありがとうございました。 該当のコードを追記しました。 よろしくお願いします。
guest

回答1

0

ベストアンサー

FTPでは、ファイルの中身しか送らないので、タイムスタンプとかアクセス権限などは送られません。
ファイル名にタイムスタンプ文字列を含めるのが簡単だと思います。

別案としては、cmd /c dirの結果ファイル等をアップロードして、それを見るとか。

投稿2019/05/20 11:42

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tonru

2019/05/20 12:18

otnさん 回答ありがとうございます。 > FTPでは、ファイルの中身しか送らないので、タイムスタンプとかアクセス権限などは送られません。 ふむぅ。仕様上、どうしようもないということなんですねぇ。 ご指摘の方法orファイルの中身にタイムスタンプ埋め込む等で対応しようと思います。
tonru

2019/05/20 12:18

2019/05/20 21:18 otnさん 回答ありがとうございます。 > FTPでは、ファイルの中身しか送らないので、タイムスタンプとかアクセス権限などは送られません。 ふむぅ。仕様上、どうしようもないということなんですねぇ。 ご指摘の方法orファイルの中身にタイムスタンプ埋め込む等で対応しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問