प्रत्येक 1 मिनट में एक sFTP बैच अपलोड स्क्रिप्टिंग


8

मैं अपने घर के हिस्से के वीडियो को वेबकैम से रिकॉर्ड करना चाहता हूं, जबकि मैं कुछ दिनों के लिए दूर रहता हूं और यह सुनिश्चित करने की कोशिश करता हूं कि किसी भी चोर की फोटो खींची जाए और फोटो को मेरे सर्वर पर अपलोड किया जाए।

मेरे पास mjpg_streamer का उपयोग करके फुटेज स्ट्रीम करने के लिए एक वेबकैम सेट है। यह काम करता है और ठीक स्ट्रीमिंग है।

जब भी आप 'FileName.jpg' कहलाना चाहते हैं, तब भी स्ट्रीम से कैप्चर करना संभव है:

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

मेरे पास अमेज़ॅन वेब सेवाओं के साथ एक अमेज़ॅन एफ़टीपी सर्वर है और एसएफटीपी का उपयोग करके एफ़टीपी एक्सेस है। मैं वर्तमान में फ़ायरफ़ॉक्स के फ़ायरफ़टीपी प्लगइन का उपयोग करके जुड़ा हुआ हूं, इसलिए यह काम करता है। कनेक्शन लाइव के साथ चल रहे कंप्यूटर को छोड़ने का विचार है।

मैं हर 1 मिनट में धारा से एक चित्र लेने की स्क्रिप्ट करना चाहता हूं और लाइव एफ़टीपी कनेक्शन के माध्यम से मेरे सर्वर पर अपलोड की गई तस्वीर है, और या तो मेरे पीसी से मूल फ़ाइल को हटा दिया गया है ताकि अगला ओ को बचाएगा। या प्रत्येक फ़ाइल के अंत में एक नंबर संलग्न करें और फिर इसे एफ़टीपी करें। जैसे FileName1.jpeg, Filename2.jpeg।

मैं घंटों के लिए Googled हूं और यद्यपि FTP अपलोड करने के बारे में पदों का भार है, मुझे अपलोड करने की एक निरंतर स्ट्रीम के बारे में कोई जानकारी नहीं मिल सकती है ... अर्थात "यह फ़ोल्डर देखें, हर 1 मिनट में सामग्री अपलोड करें और फिर एक मिनट बाद। इसमें जो भी नई सामग्री है उसे अपलोड करें ”।

मुझे लगता है कि मुझे एक बैश स्क्रिप्ट की आवश्यकता होगी जो:

  • एक काउंटर रखें ताकि प्रत्येक नई बनाई गई फ़ाइल को एक अलग नाम मिले
  • उस फ़ाइलनाम को "wget http://127.0.0.1:8080/?action=snapshot -O FileName XX .jpg" पर हर 30 सेकंड या 1 मिनट पर भेजें।
  • FTP सर्वर पर FileName XX .jpg अपलोड करें

लेकिन मुझे नहीं पता कि कैसे करना है! क्या कोई मुझे निर्देशित कर सकता है? या किसी को FileZilla या कुछ करने का तरीका पता है (जो एक फ़ोल्डर नहीं देख सकता है AFAIK: https://forum.filezilla-project.org/viewtopic.php?t=41609 ?


1
EC2 में एफ़टीपी सर्वर क्यों चलाते हैं, जब आप लागत के एक अंश पर फ़ाइल अपलोड के लिए S3 और AWS CLI क्लाइंट का उपयोग कर सकते हैं?
ट्रोग्नैंडर्स 28:16

मैं मुक्त लोगों में से एक है। यदि आप जिस एक का उल्लेख करते हैं वह उस कार्य के लिए बेहतर होगा जिसे मैं एक का उपयोग करूंगा?
Gizmo_the_Great

Wincp के साथ ftp करने के लिए फाइल कॉपी करना 5 लाइनों की तरह है, उनकी वेबसाइट देखें।
जिग्गंजर

और यह विंडोज के लिए है। हम यहां लिनक्स की बात कर रहे हैं।
Gizmo_the_Great 13

@Gizmo_the_Great यह निश्चित रूप से मैं क्या उपयोग होता है।
ट्रोग्नैंडर्स 21-28

जवाबों:


4

मेरा पहला टिप उन तारीखों और समय का उपयोग करके फाइलों को नाम देने के लिए होगा, जिन्हें वे ले गए थे। इस तरह आपको कहीं भी एक काउंटर रखने की आवश्यकता नहीं होगी, जो एक ऐसी स्क्रिप्ट में मुश्किल होगा जो लगातार नहीं चलती है क्योंकि इसके चर पर इस बदलाव को रीसेट किया जाएगा। आप चर को फ़ाइलों में संग्रहीत कर सकते हैं, लेकिन यह सुनिश्चित करना आसान है कि क्या आप नाम नहीं टकराएंगे। wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"अगर आप बैश का उपयोग कर रहे हैं तो कुछ ऐसा । (क्षमा करें यदि वाक्य रचना काम नहीं करती है, तो मैं कोई बैश विशेषज्ञ नहीं हूं और मैं अपने फोन में यह टाइप कर रहा हूं।)

जैसा कि आपने उल्लेख किया है, एफ़टीपी अपलोड की स्क्रिप्टिंग के बारे में कई ट्यूटोरियल उपलब्ध हैं। उनमें से कम से कम एक उदाहरण में एक उदाहरण शामिल होना चाहिए जो "स्नैपशॉट - *। Jpg" जैसे पैटर्न से फाइलें अपलोड करता है, जहां वाइल्डकार्ड टाइमस्टैम्प से मेल खाएगा। या, आप एक निश्चित फ़ोल्डर में सब कुछ अपलोड करने के लिए एफ़टीपी प्रोग्राम (जैसे कि lftp या ncftp, जिनके पास बायनेरिज़ का मतलब है स्क्रिप्टिंग) हो सकता है। यदि प्रोग्राम सफल हुआ तो फ़ोल्डर को मिटा दें। इस तरह से आप अपनी स्क्रिप्ट को जितनी बार चाहें क्रोन या सिस्टमड टाइमर का उपयोग करके चला सकते हैं, और क्या यह इतना लचीला है कि हमेशा किसी भी फाइल को अपलोड करने की कोशिश करें, जो बाद के समय में सफल नहीं हुई।

इस कार्य को करने के लिए डिज़ाइन किए गए सॉफ़्टवेयर भी हैं, और अधिक, अपने दम पर। ऐसा एक कार्यक्रम, जिसे मैंने खुद इस्तेमाल किया है, बस "गति" कहा जाता है और अधिकांश वितरण के लिए उपलब्ध है। इसमें बिल्ट-इन मोशन ट्रिगरिंग (रिकॉर्ड और / या स्नैपशॉट लेना) या निरंतर मोड हैं। यह रास्पबेरी-पाई जैसी प्रणालियों पर थोड़ा सीपीयू-गहन हो सकता है, लेकिन यह निश्चित रूप से काम करता है।

यदि आप इसे थोड़ा ऊपर उठाना चाहते हैं, तो शायद कई रिमोट / स्थानीय कैमरे चलाएं, और गति का पता लगाने के लिए एक अधिक शक्तिशाली केंद्रीय मशीन को लोड किया जाए, ज़ोनीमाइंडर को देखें। इसे सेट अप करने में अधिक समय लगता है, और मेरे अनुभव में आपके बारे में picky है जो मैन्युअल रूप से आपके कैमरे के फीड पर सही रिज़ॉल्यूशन सेट करता है, लेकिन इसे कुछ हद तक स्क्रिप्ट किया जा सकता है।


1

मैं EC2 में एफ़टीपी सर्वर के बजाय एडब्ल्यूएस एस 3 और फाइलों को अपलोड करने के लिए एडब्ल्यूएस सीएलआई उपकरण का उपयोग करूंगा। यह एक बहुत हल्का समाधान है, जिसमें किसी भी सिस्टम प्रशासन की आवश्यकता नहीं होती है। S3 EC2 के लिए वॉल्यूम से बहुत अधिक टिकाऊ भंडारण प्रदान करता है।

उपकरण डाउनलोड: https://aws.amazon.com/cli/

प्रासंगिक डॉक्स: http://docs.aws.amazon.com/cli/latest/reference/s3/

आप एक उपयोगकर्ता बना सकते हैं जो केवल I3 का उपयोग करके S3 बाल्टी पर अपलोड कर सकते हैं (इसलिए अपराधी फाइलों को मिटा सकते हैं!)

मैं इस कार्य को एक बैश (या पर्ल, नोड.जेएस, रूबी, पावरशेल?, ...) स्क्रिप्ट बनाकर पूरा करता हूं, जो कि वाइटल और आउटपुट को डेटाइम के साथ फ़ाइल नाम पर कॉल करता है। aws s3 cp ...फोल्डर में सभी फाइलों को अपलोड करने के लिए एक लूप में कॉल करें। लूप में, aws s3 cpप्रत्येक फ़ाइल के लिए प्रत्येक सफल कॉल पर , इसे स्थानीय स्तर पर भी सहेजे जाने के लिए एक संग्रह फ़ोल्डर में ले जाएं। यदि आप एक स्थानीय संग्रह का उपयोग नहीं करना चाहते हैं तो aws s3 mvऑटो-जादुई रूप से उन चीजों को शुद्ध करें जो पहले ही अपलोड हो चुकी हैं।


महान सलाह एस बेली। मैं अंत में उस विचार के साथ गया, और बाकी को शामिल किया। पारितोषिक के लिए धन्यवाद!
Gizmo_the_Great 15

1

मर्द - बड़ा सब जो मदद की है के लिए धन्यवाद। भाग में, आपके सभी सुझावों ने मुझे तैयार परिणाम प्राप्त करने में मदद की है। इसलिए मैंने आपको उत्तर के लिए सभी क्रेडिट दिए हैं, लेकिन मैंने अपना जवाब नीचे दिया है आशा है कि यह दूसरों के लिए उपयोगी है। मुझे लगता है कि आम तौर पर नहीं किया जाता है, लेकिन इस मामले में समाधान बनाने के लिए कई क्षेत्र हैं, इसलिए मैंने इसे नीचे एक में बांधा है।

AWS S3 का उपयोग करने के लिए आवश्यक सेवाओं को स्थापित करें

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

अपने स्वयं के अमेज़न खाते के साथ AWS S3 सेवा के लिए साइन अप करें: https://aws.amazon.com/s3/

अपने उपयोगकर्ता खाते के लिए 'एक्सेस कीज़ -> क्रिएट न्यू एक्सेस की' के माध्यम से नई एक्सेस कुंजी को परिभाषित करें और प्रोमट होने पर CSV फ़ाइल डाउनलोड करें। यदि आप ऐसा नहीं करते हैं, तो आप कमांड लाइन S3 फ़ंक्शन का उपयोग करने में सक्षम नहीं होंगे: https://console.aws.amazon.com/iam/home?#security_credential

ROOTKEY.CSV फ़ाइल खोलें और कॉपी करें और जब आप 'aws कॉन्फ़िगर' लॉन्च करते हैं, तो संकेत दिए गए निहित 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'. 

परीक्षण आप किसी फ़ाइल को एक नमूना फ़ाइल के साथ कनेक्ट और अपलोड कर सकते हैं: > 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

यह आपके mjpeg_streamer फोल्डर के 'www' सब फोल्डर में एक फाइल बनाएगा, जिसे 'आउटपुट -16-09-01-22-35-30.jpg' कहा जाता है, अगर इसे Sept 1st 2016 को 22:35 पर निष्पादित किया जाए।

एक नई बैश स्क्रिप्ट (जैसे कि MyScript.sh) बनाएं और उस पर निष्पादन योग्य अनुमति दें और नीचे की सामग्री को उसमें कॉपी करें। जब चलाया जाता है, तो यह हर 5 सेकंड में एक टाइमस्टैम्पड जेपीईजी बनाएगा जब तक कि वर्तमान तिथि निर्दिष्ट अंतिम तिथि नहीं बन जाती। इस स्थिति में, यह तारीख A से शुरू होता है और Date 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 सेकंड में दो घंटे फायरिंग के लिए छोड़ दिया और इसने 74Mb अपलोड किए। इसलिए मैं काम करता हूं कि एक हफ्ते के लिए 6.5Gb होना चाहिए - उस सेवा के लिए मूल्य निर्धारण स्तर से कम जहां लागत में किक होती है, जो मुझे लगता है कि 8Gb है।

एक बार फिर धन्यवाद।


1
अंतरिक्ष उपयोग की चिंताओं के संबंध में, S3 आपको उन वस्तुओं के लिए जीवन चक्र नियम निर्धारित करने की अनुमति देता है जो उन्हें निर्दिष्ट समय के बाद ग्लेशियर (या बस उन्हें हटा दें) जैसे सस्ते भंडारण में ले जाएंगे। आपकी अपलोड स्क्रिप्ट सरल है जितना मैं सोच रहा था कि मेरा होगा ... यह एक तारीफ है। संपूर्ण समाधान पोस्ट करने के लिए धन्यवाद!
trognanders 20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.