모니터링 및 실행에는 inotifywait를 사용하지만 대기열에서는

모니터링 및 실행에는 inotifywait를 사용하지만 대기열에서는

~/rtorrent/completed다운로드한 토렌트 콘텐츠를 . Inotifywait는 백그라운드에서 나타나는 새 파일을 확인한 다음 ~/rtorrent/completed해당 파일을 사용하여 Google 드라이브에 업로드합니다.rclone copy

따라서 첫 번째 토렌트가 완료되면 파일을 위 폴더로 이동하고 rclone이 업로드를 시작하지만 문제는 두 번째 토렌트가 완료되고 ~/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에 파일을 허용하는 삼바 공유가 있고 목표는 비디오 파일을 거기에서 다른 디렉토리로 이동하여 ffmpegYouTube에 업로드하기 전에 처리하는 것입니다. 더 이상 편리하지 않기 때문에 스크립트 코드를 게시할 수 없습니다(직업을 변경했습니다). 하지만 몇 가지 팁을 드릴 수 있습니다. man mkfifo새 파일에 대한 파이프( )와 이를 위한 도우미 스크립트가 필요합니다. 파이프 라인 루프에서 파일을 "읽습니다".

따라서 최소한 두 개의 스크립트가 필요합니다. 하나는 inotifywait새 파일 이름을 파이프로 보내기 위해 실행하고 다른 하나는 파이프를 읽고 필요한 프로세스를 트리거합니다(귀하의 경우 upload 사용 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}".

컴퓨터를 부팅한 후 스크립트를 트리거하려면 작업을 수행하기 위한 세 번째 스크립트가 필요합니다. 데몬 스크립트를 트리거하거나 (or)에서 유사한 스크립트를 실행하는 su -c데 사용하는 것이 좋습니다.&rc.local/etc/rc.d/etc/init.d

관련 정보