皆さん、こんにちわ。
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)
よろしくお願いします。
以上です。
回答1件
あなたの回答
tips
プレビュー