ページ 1 / 1
ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月26日(土) 23:57
by moba
特定サイト用のダウンローダ(コマンドラインツール)を作りたいです。
バックグラウンド実行やメッセージ関連の技術について教えてください。
次のような使い方を想定しています。
コード:
$ dl <指示1>
$ dl <指示2>
(ターミナルを閉じる)
(<指示1>に対応するファイルが、このマシンにダウンロードされる)
(<指示2>に対応するファイルが、このマシンにダウンロードされる)
ポイントは、次の4点です。
・ダウンロードはバックグラウンドで実行される
・ダウンロード用プロセスの寿命は、ターミナルの寿命から独立している
・ダウンロードは同時に1つのみ(相手側サーバの負荷軽減のため)
・ダウンロード中に新たな指示が来た場合は、現在のダウンロードが終了してから実行する
これらの実現には、何という技術を使うべきですか。
また、僕が少し調べたところ、
・Linuxでは、デーモンプロセス + 指示のスタック用ファイル で実現できそうだと思います。
・Windowsでは、どうするべきでしょうか。
・また、Windows/Linuxにおいて、共通の方法で上記ポイントを達成できないでしょうか。
よろしくお願いします。
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 14:15
by tanu_kichi
以下のキーワードでネット検索すれば、制作方法がわかるかもしれません。
wget
bash
linux バックグラウンド実行
linux ターミナル コマンド
WSL (あるいは msys2)
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 16:19
by moba
tanu_kichiさん、返信ありがとうございました。
たぶん勧められたのは、直前のプロセスが終わるのを待ってから実行される
バックグラウンド・プロセスだと思います。
この方法の問題点を、次のように僕は認識しています。
・ターミナルを閉じるとプロセスが終了する
・別のターミナルから実行した場合、逐次実行にならない(並行&逐次実行ではなく、並列実行になってしまう)
何か別の方法があるといいのですが……。
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 17:40
by tanu_kichi
>>・ターミナルを閉じるとプロセスが終了する
>>・別のターミナルから実行した場合、逐次実行にならない(並行&逐次実行ではなく、並列実行になってしまう)
解決方法の候補は、いくつかあるかと思います。以下は1つの例です。
ターミナルからシェルスクリプトをバックグラウンド実行すれば、ターミナルを閉じても
ダウンロードプロセスは、終了しません。
並列実行を避ける方法として、
(1)wget する前に tmpファイルの存在チェック、なければ、tmpファイル作成して(3)へ。
(2)tmpファイルがあれば 、n秒間ウェイト、(1)へ。
(3)wget
(4)tmpファイル削除
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 18:12
by moba
> ターミナルからシェルスクリプトをバックグラウンド実行すれば、ターミナルを閉じても
> ダウンロードプロセスは、終了しません。
そうですか? 僕はwget以外のコマンドを使っているのですが、どうも
ターミナルを閉じた瞬間にプロセスも閉じられているように思います。
> 並列実行を避ける方法として、
コマンドの入力順と実行順が変わるかもしれませんが、
並列実行は避けられますね。ありがとうございます。
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 21:37
by tanu_kichi
>>そうですか? 僕はwget以外のコマンドを使っているのですが、どうも
>>ターミナルを閉じた瞬間にプロセスも閉じられているように思います。
説明不足で、申し訳ありません。
linux nohupコマンド
をネット検索してみて下さい。
>>コマンドの入力順と実行順が変わるかもしれませんが、
FIFI (先入れ先出し)queue (キュー)
でネット検索すれば、実行順を変えずに実行できる方法がわかるかもしれません。
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 21:49
by moba
> inux nohupコマンド
ありがとうございます。まさにこれですね!
サーバー、ソケット、TCPみたいな技術無しで動きそうです。
> 説明不足
すみません、こちらの理解不足だと思います。
バックグラウンド実行 = 行末の&(ドル記号)だと思い込んでいました。
> queue
tmpファイルにプロセスIDを保存し、先頭のID=このプロセスのIDになったら実行
などとやってみようと思います。
ありがとうございました!
Re: ダウンロードを逐次実行するCLIツールの制作
Posted: 2019年10月27日(日) 21:54
by moba
訂正:
queueファイルの監視者のみnohupで永続させて、
ダウンロード用コマンド = queueファイルへの追記としようと思います。