1 분마다 sFTP 일괄 업로드 스크립팅


8

며칠 동안 외출하는 동안 웹캠을 사용하여 집 일부의 비디오를 녹화하려고합니다.

mjpg_streamer를 사용하여 푸티지를 스트리밍하도록 웹캠을 설정했습니다. 그것은 작동하고 스트리밍 괜찮습니다.

'FileName.jpg'를 원할 때마다 스트림에서 스틸 캡처를 수행 할 수 있습니다.

wget http://127.0.0.1:8080/?action=snapshot -O FileName.jpg 

Amazon Web Services 및 sFTP를 사용한 FTP 액세스가 가능한 Amazon FTP 서버가 있습니다. Firefox의 FireFTP 플러그인을 사용하여 현재 연결되어 있으므로 작동합니다. 연결 상태로 컴퓨터를 실행 상태로 두는 것이 좋습니다.

스트림에서 사진을 찍는 것을 1 분마다 말하고 라이브 FTP 연결을 통해 서버에 사진을 업로드하고 원본 파일을 내 PC에서 삭제하여 다음 파일이 O를 저장하도록하고 싶습니다. 또는 각 파일의 끝에 번호를 추가 한 다음 FTP로 추가하십시오. 예 : FileName1.jpeg, Filename2.jpeg.

몇 시간 동안 Google 검색을 해왔지만 FTP 업로드 스크립팅에 대한 게시물이 많이 있지만 지속적인 업로드 스트림에 대해서는 찾을 수 없습니다. "이 폴더를보고 1 분마다 콘텐츠를 업로드 한 다음 1 분 후에 업로드하십시오. 새 콘텐츠가 있으면 업로드 "

나는 다음과 같은 bash 스크립트가 필요하다고 생각한다.

  • 새로 작성된 각 파일이 다른 이름을 갖도록 카운터를 유지하십시오.
  • 30 초 또는 1 분마다 해당 파일 이름을 "wget http://127.0.0.1:8080/?action=snapshot -O FileName XX .jpg"로 보내십시오.
  • FileName XX .jpg를 FTP 서버에 업로드

그러나 나는 그것을하는 방법을 모른다. 누구든지 나를 지시 할 수 있습니까? 또는 누구든지 FileZilla 또는 무언가 (AFAIK 폴더를 볼 수없는 https://forum.filezilla-project.org/viewtopic.php?t=41609) 와 관련된 방법을 알고 있습니까?


1
적은 비용으로 파일 업로드에 S3 및 AWS CLI 클라이언트를 사용할 수있는 경우 EC2에서 FTP 서버를 실행하는 이유는 무엇입니까?
trognanders

나는 무료 afaik 중 하나가 있습니다. 언급 한 것이 작업에 더 좋으면 하나를 사용합니까?
Gizmo_the_Great

winscp를 사용하여 ftp로 파일을 복사하는 것은 5 줄과 같습니다. 웹 사이트를 참조하십시오.
jiggunjer

그리고 그것은 Windows 용입니다. 우리는 여기서 리눅스를 이야기하고 있습니다.
Gizmo_the_Great

@Gizmo_the_Great 확실히 내가 사용할 것입니다.
trognanders

답변:


4

첫 번째 팁은 촬영 날짜와 시간을 사용하여 파일 이름을 지정하는 것입니다. 이렇게하면 어디서나 카운터를 유지할 필요가 없습니다. 매번 호출 할 때마다 변수가 재설정되므로 스크립트가 지속적으로 실행되지 않습니다. 변수를 파일에 저장할 수 있지만 이름이 충돌하지 않도록하는 것이 더 쉽습니다. wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"Bash를 사용하는 것과 같은 것 . (구문이 작동하지 않으면 죄송합니다. Bash 전문가가 아니며 전화로 입력하고 있습니다.)

언급 한 바와 같이 사용 가능한 FTP 업로드 스크립팅에 대한 몇 가지 자습서가 있습니다. 와일드 카드가 타임 스탬프와 일치하는 "Snapshot-*. jpg"와 같은 패턴으로 파일을 업로드하는 예제를 포함해야합니다. 또는 FTP 프로그램 (예 : 스크립트 용 바이너리가있는 lftp 또는 ncftp 등)이 특정 폴더의 모든 항목을 업로드하도록 지정할 수 있습니다. 그런 다음 프로그램이 성공하면 폴더를 정리하십시오. 이렇게하면 cron 또는 systemd timer를 사용하여 원하는만큼 스크립트를 실행할 수 있으며 나중에 실행했을 때 성공하지 못한 파일을 항상 업로드 할 수있을 정도로 유연합니다.

이 작업 등을 스스로 수행하도록 설계된 소프트웨어도 있습니다. 내가 직접 사용한 그러한 프로그램 중 하나를 간단히 "모션"이라고하며 대부분의 배포판에서 사용할 수 있습니다. 내장 모션 트리거링 (녹화 및 / 또는 스냅 샷 찍기) 또는 연속 모드가 있습니다. Raspberry-Pi와 같은 시스템에서는 약간의 CPU 집약적 일 수 있지만 확실히 작동합니다.

조금씩 단계를 높이려면 여러 대의 원격 / 로컬 카메라를 실행하고 모션 감지 기능을보다 강력한 중앙 시스템으로 오프로드하려면 Zoneminder를 살펴보십시오. 설정하는 데 시간이 오래 걸리고 필자의 경험에 따르면 카메라 피드에서 올바른 해상도를 수동으로 설정하는 것이 까다 롭지 만 어느 정도 스크립트를 작성할 수 있습니다.


1

EC2에서는 FTP 서버 대신 AWS S3를 사용하고 AWS CLI 도구를 사용하여 파일을 업로드합니다. 시스템 관리가 필요없는 훨씬 가벼운 솔루션입니다. S3는 EC2 볼륨보다 훨씬 내구성이 뛰어난 스토리지를 제공합니다.

도구 다운로드 : https://aws.amazon.com/cli/

관련 문서 : http://docs.aws.amazon.com/cli/latest/reference/s3/

IAM을 사용하여 S3 버킷에만 업로드 할 수있는 사용자를 만들 수 있습니다 (따라서 범죄자는 파일을 지울 수 없습니다!)

wget을 호출하고 날짜 시간이있는 파일 이름으로 출력하는 bash (또는 perl, node.js, ruby, powershell ?, ...) 스크립트를 작성 하여이 작업을 수행합니다. aws s3 cp ...폴더에있는 모든 파일을 업로드하려면 for 루프를 호출 하십시오. 루프에서 aws s3 cp각 파일을 성공적으로 호출 할 때마다 파일을 보관 폴더로 이동하여 로컬로 저장합니다. 로컬 아카이브를 사용하지 않으려면 aws s3 mv이미 업로드 된 항목을 자동으로 제거합니다.


훌륭한 조언 S Bailey. 나는 결국 그 아이디어를 가지고 나머지를 포함시켰다. 팁 고마워!
Gizmo_the_Great

1

신사-도움을 주신 모든 분들께 감사드립니다. 부분적으로 귀하의 모든 제안은 최종 결과를 얻는 데 도움이되었습니다. 답장에 대한 모든 크레딧을 주었지만 다른 사람들에게 도움이되기를 바랍니다. 나는 그것이 일반적으로 수행되는 것이 아니라는 것을 알고 있지만,이 경우 솔루션을 형성 할 수있는 많은 영역이 있으므로 아래의 하나에 모두 묶었습니다.

AWS S3를 사용하는 데 필요한 서비스를 설치하십시오.

# > sudo apt-get install python-pip
# > sudo pip install awscli

자신의 Amazon 계정으로 https://aws.amazon.com/s3/ 로 AWS S3 서비스에 가입 하십시오.

'액세스 키-> 새 액세스 키 만들기'를 통해 사용자 계정의 새 액세스 키를 정의하고 약속 된 경우 CSV 파일을 다운로드하십시오. 이 작업을 수행하지 않으면 명령 줄 S3 기능을 사용할 수 없습니다 : https://console.aws.amazon.com/iam/home?#security_credential

ROOTKEY.CSV 파일을 열고 'aws configure'를 시작할 때 프롬프트가 표시되면 포함 된 AccessKeyID 값과 SecretKey 값을 복사하여 붙여 넣으십시오. Linux에서 AWS를 사용하기 전에 명령 행에서 실행합니다.

> aws configure
Enter your access key and secret key when asked. You can leave the third and fourth empty or as 'None'. 

sample.txt 파일을 사용하여 파일을 연결하고 업로드 할 수 있는지 테스트하십시오. > aws s3 mv ~/SourceFolder/sample.txt s3://NameOfYourAWSS3Bucket/ AFolderYouHaveCreated

빌드 지침에 따라 mjpg_streamer를 다운로드하여 설치하십시오. https://github.com/jacksonliam/mjpg-streamer#building--installation 완료되면 해당 폴더로 이동 하십시오.

> cd mjpg_streamer

mjpg 스 트리머를 시작하십시오.

> mjpg_streamer -i "./input_uvc.so -f 15 -r 1280x960" -o "./output_http.so -w ./www"

웹 브라우저에서 다음 링크를 방문하여 실행 중인지 확인하십시오.

http://127.0.0.1:8080/stream.html

다음과 같이 단일 날짜 및 시간 스탬프 파일을 가져 와서 실행중인 로컬 디렉토리에 저장하십시오.

> wget http://127.0.0.1:8080/?action=snapshot -O output-$(date +"%Y-%m-%d-%k-%M-%S").jpg

이렇게하면 2016 년 9 월 1 일 22:35에 실행되는 경우 mjpeg_streamer 폴더의 'www'하위 폴더에 'output-16-09-01-22-35-30.jpg'라는 파일이 생성됩니다.

새 bash 스크립트 (예 : MyScript.sh)를 작성하고 실행 권한을 부여하고 맨 아래에 컨텐츠를 복사하십시오. 실행하면 현재 날짜가 지정된 종료 날짜가 될 때까지 5 초마다 타임 스탬프 된 JPEG가 생성됩니다. 이 경우 날짜 A에서 시작하여 날짜 B에서 끝납니다. 자신의 날짜를 대체하십시오.

관련 경로를 대체하여 스크립트에 복사하십시오.

#!/bin/bash  
     SOURCE="/home/YourUser/YourSourceFolder"
     DESTINATION="s3://YourS3Bucket/DestinationFolder"
     input_start=2016-8-29
     input_end=2016-9-9
     startdate=$(date -I -d "$input_start") || exit -1
     enddate=$(date -I -d "$input_end")     || exit -1

     d="$startdate"

       while [ "$d" != "$enddate" ]; do 
       sleep 5
         wget "http://127.0.0.1:8080/?action=snapshot" -O output-$(date +"%Y-%m-%d-%k-%M-%S")'.jpg';
         aws s3 mv $SOURCE $DESTINATION --recursive;
       done

개선을위한 제안을 환영합니다.

또한 AWS S3에서 스토리지의 진행 상황을 확인할 수 있습니다.

aws s3 ls s3://yourbucketname --recursive --human-readable --summarize

나는 매 10 초마다 2 시간 동안 발사하여 74Mb의 업로드를 생성했습니다. 따라서 비용이 발생하는 서비스의 가격 계층보다 적은 주당 6.5Gb로 작동합니다. 8Gb라고 생각합니다.

다시 감사합니다.


1
공간 사용 문제와 관련하여 S3를 사용하면 지정된 시간이 지나면 빙하와 같은 저렴한 저장소로 객체를 이동하거나 삭제하는 객체의 수명주기 규칙을 설정할 수 있습니다. 업로드 스크립트는 내가 촬영 한 것보다 간단합니다. 칭찬입니다. 전체 솔루션을 게시 해 주셔서 감사합니다!
trognanders
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.