バージョン
- PHP 7.1.1
- Laravel 5.8.37
発生している問題・エラーメッセージ
http://ykaku.com/ginkokensaku/ginkositen1.zip
から銀行店舗情報のzipをダウンロードし、内容をDBに保存するバッチ処理を実装しています。
バッチ処理用にartisan command クラスを作成し、毎月指定の日時に実行するようスケジューリングしています。
ファイルダウンロードはfile_get_contents()で行っていますが、その部分でno route to hostというエラーが出てしまいダウンロードできません。
ただ、常にそのエラーが出るわけではなく
- ローカルでコマンド実行 -> エラーなし。zipは正常にダウンロードされ、DBの内容は更新される
- 本番用サーバー(AWS EC2)にssh接続してコマンド実行 -> エラーなし 。zipは正常にダウンロードされ、DBの内容は更新される
- 本番用サーバー内でスケジューリングされた日時に自動実行 -> no route for host のエラー発生
といった感じで、手動でコマンドを実行した場合はエラーが出ず、自動実行された場合のみエラーが出るようなのです
allow_url_fopenが向こうになっているのかと思い確認しましたが、しっかり有効になっていました。
他に確認すべき点や原因と思われるものがあれば、教えていただきたくおもいます。
よろしくお願いいたします。
該当のソースコード
php
1 2 3 /** 4 * Execute the console command. 5 * 6 * @return mixed 7 */ 8 public function handle() 9 { 10 //テキストファイルの並び 11 //金融機関コード, 支店番号, カナ, 銀行名or支店名, 名称区分(1:銀行名称 2:支店名称), 並びコード(1:重複なしor母店 2~:出張所) 12 13 14 $url = 'http://ykaku.com/ginkokensaku/ginkositen1.zip'; 15 $zipFilePath = 'BankMaster/tmp/bank_master.zip'; 16 $zipFileFullPath = config('filesystems.disks.command.root').'/'.$zipFilePath; 17 18 try{ 19 //zipファイルダウンロード 20 if (!$this->fileDownload($url, $zipFilePath)) { 21 throw new FailedToSaveFileException(); 22 } 23 //zipファイルの内容でデータを更新 24 $this->importBankData($zipFileFullPath); 25 26 }catch (\Exception $e){ 27 if ($e instanceof FailedToImportBankDataException) { 28 $e->outputEachErrorMessage(); 29 $this->outputLog($e, trans('error_message.command.update_bank_master.failed_to_import_data')); 30 }else { 31 $this->outputLog($e); 32 } 33 }finally{ 34 //ファイルの削除 35 if (\Storage::disk('command')->exists($zipFilePath)) { 36 \Storage::disk('command')->delete($zipFilePath); 37 } 38 \CustomLog::info('DONE: updateBankMaster'); 39 } 40 } 41 42 /** 43 * zipファイルダウンロード 44 * @param string $url 45 * @param string $zipFilePath 46 * @return bool 47 * @throws FailedToSaveFileException 48 * @throws FileExistsException 49 */ 50 private function fileDownload(string $url, string $zipFilePath) 51 { 52 if (\Storage::disk('command')->exists($zipFilePath)) { 53 throw new FileExistsException(trans('error_message.command.update_bank_master.file_exists')); 54 } 55 56 //zipファイルダウンロード 57 //ここで no route to host のエラー 58 //ただし、手動でコマンドを実行した時は出ない。スケジューリングされた自動実行時のみ出る 59 $tmp = file_get_contents($url); 60 //zipファイルダウンロード失敗時 61 if (!$tmp) { 62 throw new FailedToSaveFileException(trans('error_message.command.update_bank_master.failed_to_save_file')); 63 } 64 65 //指定のディレクトリにファイルを保存 66 return \Storage::disk('command')->put($zipFilePath, $tmp); 67 } 68 69以下略 70 71} 72
/app/Console/Kernel.phpでは以下のようにスケジュールを設定しています
php
1 2//毎月8,18,28日の8:00amに実行 3$schedule->command('updateBankMaster')->cron('0 6 8,18,28 * *')->withoutOverlapping();
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/11 07:07
2020/12/11 12:27