~/rtorrent/completed
ダウンロードした急流コンテンツを。 Inotifywaitはバックグラウンドで表示される新しいファイルを確認し、そのファイル~/rtorrent/completed
を使用してGoogleドライブにアップロードします。rclone copy
したがって、最初の急流が完了すると、ファイルを上のフォルダに移動してrcloneがアップロードを開始しますが、問題は、2番目の急流が完了してコンテンツを再度移動した~/rtorrent/completed
後に最初のアップロードプロセスが中断されることです。 Inotifywaitはそれを新しいイベントとして扱います。とにかくキューに入れて一つずつできますか?
これは実行中のシェルスクリプトです。
#!/bin/bash
cd ~/rtorrent/readytoupload/
inotifywait -m ~/rtorrent/readytoupload -s ~/rtorrent/log.txt -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
rclone copy $file tempd:test/$file
done
答え1
私も数年前、職場で同様のプロセスを経験しました。 Linuxにファイルを許可するSamba共有があり、目標はビデオファイルをそこから別のディレクトリに移動してffmpeg
YouTubeにアップロードする前に処理することです。もう便利ではないので、スクリプトコードを投稿できません(仕事を変更しました)。しかし、いくつかのヒントを提供することができます。man mkfifo
新しいファイルのパイプ()とそのためのヘルパースクリプトが必要です。パイプラインループからファイルを「読み込み」。
したがって、少なくとも2つのスクリプトが必要です。 1つはinotifywait
新しいファイル名をパイプに送信するために実行し、もう1つはパイプを読み取り、必要なプロセスをトリガーします(あなたの場合はアップロードを使用rclone
)。追加された新しいファイルはすべてパイプラインに配置され、ファイルを待ちます。最初のスクリプトは新しいファイルを継続的に監視し、できるだけ早く補助スクリプトに送信する必要があります。
つまり:
#!/bin/bash
cd ~/rtorrent/readytoupload/
inotifywait -m ~/rtorrent/readytoupload -s ~/rtorrent/log.txt -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
# I'm not entirely sure about the & placement here, if its neccesary at all,
# but the goal is to prevent a block while the secondary script is working on another file.
echo ${file} > /tmp/mypipe &
done
ヘルパースクリプトの例:
#!/bin/bash
while true ; do
if read line < /tmp/mypipe ; then
echo $line
# your rclone command goes here.
fi
loop
中カッコは、スペースを含むファイル名が複数の引数として解釈されるのを防ぐために存在します。このように引用する必要があります"${file}"
。
コンピュータの起動後にスクリプトを起動するには、操作を実行するための3番目のスクリプトが必要です。デーモンスクリプトをトリガーしたり、(or)で同様のスクリプトを実行したりすることをお勧めsu -c
します。&
rc.local
/etc/rc.d
/etc/init.d