ダウンロードを逐次実行するCLIツールの制作

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
moba
記事: 82
登録日時: 8年前

ダウンロードを逐次実行するCLIツールの制作

#1

投稿記事 by moba » 4年前

特定サイト用のダウンローダ(コマンドラインツール)を作りたいです。
バックグラウンド実行やメッセージ関連の技術について教えてください。

次のような使い方を想定しています。

コード:

$ dl <指示1>
$ dl <指示2>
(ターミナルを閉じる)
(<指示1>に対応するファイルが、このマシンにダウンロードされる)
(<指示2>に対応するファイルが、このマシンにダウンロードされる)
ポイントは、次の4点です。

・ダウンロードはバックグラウンドで実行される
・ダウンロード用プロセスの寿命は、ターミナルの寿命から独立している
・ダウンロードは同時に1つのみ(相手側サーバの負荷軽減のため)
・ダウンロード中に新たな指示が来た場合は、現在のダウンロードが終了してから実行する

これらの実現には、何という技術を使うべきですか。

また、僕が少し調べたところ、

・Linuxでは、デーモンプロセス + 指示のスタック用ファイル で実現できそうだと思います。
・Windowsでは、どうするべきでしょうか。
・また、Windows/Linuxにおいて、共通の方法で上記ポイントを達成できないでしょうか。

よろしくお願いします。

tanu_kichi
記事: 15
登録日時: 4年前

Re: ダウンロードを逐次実行するCLIツールの制作

#2

投稿記事 by tanu_kichi » 4年前

以下のキーワードでネット検索すれば、制作方法がわかるかもしれません。
wget
bash
linux バックグラウンド実行
linux ターミナル コマンド
WSL (あるいは msys2)

moba
記事: 82
登録日時: 8年前

Re: ダウンロードを逐次実行するCLIツールの制作

#3

投稿記事 by moba » 4年前

tanu_kichiさん、返信ありがとうございました。

たぶん勧められたのは、直前のプロセスが終わるのを待ってから実行される
バックグラウンド・プロセスだと思います。

この方法の問題点を、次のように僕は認識しています。

・ターミナルを閉じるとプロセスが終了する
・別のターミナルから実行した場合、逐次実行にならない(並行&逐次実行ではなく、並列実行になってしまう)

何か別の方法があるといいのですが……。

tanu_kichi
記事: 15
登録日時: 4年前

Re: ダウンロードを逐次実行するCLIツールの制作

#4

投稿記事 by tanu_kichi » 4年前

>>・ターミナルを閉じるとプロセスが終了する
>>・別のターミナルから実行した場合、逐次実行にならない(並行&逐次実行ではなく、並列実行になってしまう)

解決方法の候補は、いくつかあるかと思います。以下は1つの例です。

ターミナルからシェルスクリプトをバックグラウンド実行すれば、ターミナルを閉じても
ダウンロードプロセスは、終了しません。

並列実行を避ける方法として、
(1)wget する前に tmpファイルの存在チェック、なければ、tmpファイル作成して(3)へ。
(2)tmpファイルがあれば 、n秒間ウェイト、(1)へ。
(3)wget
(4)tmpファイル削除

moba
記事: 82
登録日時: 8年前

Re: ダウンロードを逐次実行するCLIツールの制作

#5

投稿記事 by moba » 4年前

> ターミナルからシェルスクリプトをバックグラウンド実行すれば、ターミナルを閉じても
> ダウンロードプロセスは、終了しません。

そうですか? 僕はwget以外のコマンドを使っているのですが、どうも
ターミナルを閉じた瞬間にプロセスも閉じられているように思います。

> 並列実行を避ける方法として、

コマンドの入力順と実行順が変わるかもしれませんが、
並列実行は避けられますね。ありがとうございます。

tanu_kichi
記事: 15
登録日時: 4年前

Re: ダウンロードを逐次実行するCLIツールの制作

#6

投稿記事 by tanu_kichi » 4年前

>>そうですか? 僕はwget以外のコマンドを使っているのですが、どうも
>>ターミナルを閉じた瞬間にプロセスも閉じられているように思います。

説明不足で、申し訳ありません。
linux nohupコマンド
をネット検索してみて下さい。

>>コマンドの入力順と実行順が変わるかもしれませんが、

FIFI (先入れ先出し)queue (キュー)
でネット検索すれば、実行順を変えずに実行できる方法がわかるかもしれません。

moba
記事: 82
登録日時: 8年前

Re: ダウンロードを逐次実行するCLIツールの制作

#7

投稿記事 by moba » 4年前

> inux nohupコマンド
ありがとうございます。まさにこれですね!
サーバー、ソケット、TCPみたいな技術無しで動きそうです。

> 説明不足
すみません、こちらの理解不足だと思います。
バックグラウンド実行 = 行末の&(ドル記号)だと思い込んでいました。

> queue
tmpファイルにプロセスIDを保存し、先頭のID=このプロセスのIDになったら実行
などとやってみようと思います。

ありがとうございました!

moba
記事: 82
登録日時: 8年前

Re: ダウンロードを逐次実行するCLIツールの制作

#8

投稿記事 by moba » 4年前

訂正:
queueファイルの監視者のみnohupで永続させて、
ダウンロード用コマンド = queueファイルへの追記としようと思います。

返信

“C言語何でも質問掲示板” へ戻る