প্রতি 1 মিনিটে একটি এসএফটিপি ব্যাচকে স্ক্রিপ্ট করা ting


8

আমি আমার বাড়ির অংশের ভিডিওটি একটি ওয়েবক্যামের সাথে রেকর্ড করতে চাইছি যখন আমি চেষ্টা করেছি এবং কিছু চোরের ছবি তোলা হয়েছে কিনা তা নিশ্চিত করার জন্য আমি কিছু দিন দূরে রয়েছি এবং ছবিটি এটি উপলব্ধি করার আগেই আমার সার্ভারে আপলোড করা হয়েছে।

Mjpg_streamer ব্যবহার করে ফুটেজ স্ট্রিম করার জন্য আমি একটি ওয়েবক্যাম সেটআপ করেছি। এটি কাজ করে এবং ঠিক আছে স্ট্রিমিং।

আপনি যখনই 'ফাইলের নাম.জপিজি' কল করতে চান তখন স্ট্রিম থেকে স্থির থাকা সম্ভব:

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

আমার অ্যামাজন ওয়েব সার্ভিসেস এবং এসএফটিপি ব্যবহার করে এফটিপি অ্যাক্সেস সহ একটি অ্যামাজন এফটিপি সার্ভার রয়েছে। আমি বর্তমানে ফায়ারফক্সের ফায়ারএফটিপি প্লাগইন ব্যবহার করে সংযুক্ত রয়েছি, যাতে এটি কার্যকর হয়। ধারণাটি হ'ল কম্পিউটারটি সংযোগটি দিয়ে সরাসরি চলতে দেওয়া উচিত।

আমি স্ট্রিম থেকে একটি ছবি তোলার জন্য প্রতি 1 মিনিট বলে স্ক্রিপ্ট করতে চাই এবং লাইভ এফটিপি সংযোগের মাধ্যমে ছবিটি আমার সার্ভারে আপলোড করলাম, এবং হয় মূল ফাইলটি আমার পিসি থেকে মুছে ফেলা হয়েছে যাতে পরের ছবিটি ও সংরক্ষণ করতে পারে বা প্রতিটি ফাইলের শেষে একটি নম্বর যুক্ত করুন এবং তারপরে এটি এফটিপি করুন। উদাহরণস্বরূপ FileName1.jpeg, ফাইলের নাম 2.jpeg।

আমি কয়েক ঘন্টা ধরে গুগল করেছি এবং এফটিপি আপলোডের স্ক্রিপ্টিং সম্পর্কে প্রচুর পোস্ট থাকলেও আপলোডের ধ্রুব স্ট্রিম সম্পর্কে আমি আর কিছু খুঁজে পাচ্ছি না ... অর্থাৎ "এই ফোল্ডারটি দেখুন, প্রতি 1 মিনিট পরে সামগ্রীটি আপলোড করুন এবং তারপরে এক মিনিট পরে এতে যা কিছু নতুন সামগ্রী আপলোড করুন "

আমার ধারণা আমার একটি বাশ স্ক্রিপ্ট দরকার যা এটি করবে:

  • একটি পাল্টা রাখুন যাতে প্রতিটি সৃজিত ফাইলের আলাদা নাম হয়
  • প্রতি 30 সেকেন্ড বা 1 মিনিটের মধ্যে "উইজেট http://127.0.0.1:8080/?action=snaphot -O ফাইলনাম XX .jpg" এ ফাইল নামটি পাঠান
  • এফটিপি সার্ভারে ফাইলের নাম XX .jpg আপলোড করুন

তবে কীভাবে করব তা আমার ধারণা নেই! কেউ কি আমাকে পরিচালনা করতে পারেন? বা কেউ কি ফাইলজিলা বা এমন কিছু করার উপায় জানেন (যা কোনও ফোল্ডার AFAIK দেখতে পারে না: https://forum.filezilla-project.org/viewtopic.php?t=41609 ?


1
কেন আপনি ইসির 2 এফটিপি সার্ভার চালান, যখন আপনি ব্যয়ের একটি ভগ্নাংশে ফাইল আপলোডের জন্য এস 3 এবং এডাব্লুএস সিএলআই ক্লায়েন্ট ব্যবহার করতে পারেন?
ট্রগানান্ডাররা

আমার এক ফ্রি আছে আফিক। আপনি যেটির কথা উল্লেখ করেছেন তা যদি কাজটির জন্য ভাল হয় তবে আমি এটি ব্যবহার করব?
গিজমো_এই_ গ্রেট

Winscp দিয়ে এফটিপি-তে ফাইলগুলি অনুলিপি করা 5 টি লাইনের মতো, তাদের ওয়েবসাইট দেখুন।
jiggunjer

এবং এটি উইন্ডোজের জন্য। আমরা এখানে লিনাক্স কথা বলছি।
Gizmo_t__ গ্রেট

@ জিজমো_থ_ গ্রেট এটি অবশ্যই আমি ব্যবহার করব।
52

উত্তর:


4

আমার প্রথম পরামর্শটি ফাইলগুলি নেওয়ার তারিখ এবং সময় ব্যবহার করে নামকরণ করা হবে। এইভাবে আপনার কোথাও কাউন্টার রাখার প্রয়োজন হবে না, যা কোনও স্ক্রিপ্টে কঠিন হবে যা ধারাবাহিকভাবে চালিত হয় না কারণ এর ভেরিয়েবলগুলি প্রতিটি অনুরোধে পুনরায় সেট হয়ে যায়। আপনি ফাইলগুলিতে ভেরিয়েবল সংরক্ষণ করতে পারতেন, তবে আপনি নামগুলি সংঘর্ষে না চলে তা নিশ্চিত করে নেওয়া আরও সহজ। wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"আপনি বাশ ব্যবহার করছেন এমন কিছু । (দুঃখিত যদি সিনট্যাক্সটি কাজ না করে তবে আমি কোনও বাশ বিশেষজ্ঞ নই এবং আমি এটি আমার ফোনে টাইপ করছি))

আপনি যেমন উল্লেখ করেছেন, স্ক্রিপ্টিং এফটিপি আপলোডগুলি সম্পর্কে বিভিন্ন টিউটোরিয়াল রয়েছে। তাদের মধ্যে কমপক্ষে একটিতে একটি উদাহরণ থাকা উচিত ছিল যা "স্ন্যাপশট - *। জেপিজি" এর মতো কোনও প্যাটার্ন দ্বারা ফাইলগুলি আপলোড করে, যেখানে ওয়াইল্ডকার্ড টাইমস্ট্যাম্পের সাথে মিলবে। অথবা, আপনি এফটিপি প্রোগ্রামটি নির্দিষ্ট করতে পারেন (যেমন lftp বা ncftp, যা স্ক্রিপ্ট করার জন্য বাইনারি রয়েছে) নির্দিষ্ট ফোল্ডারে সমস্ত কিছু আপলোড করতে। প্রোগ্রামটি সফল হলে ফোল্ডারটি মুছুন। আপনি ক্রোন বা সিস্টেমযুক্ত টাইমার হিসাবে যতবার ব্যবহার করতে চান ততবার আপনি আপনার স্ক্রিপ্টটি চালাতে পারেন এবং পরবর্তী সময়ে এটি চালিত হওয়ার সাথে সাথে কোনও ফাইল আপলোড করার চেষ্টা করা যথেষ্ট নমনীয় হবে be

এই টাস্কটি করার জন্য আরও অনেকগুলি সফ্টওয়্যার তৈরি করা হয়েছে এবং আরও কিছু নিজস্ব। এই জাতীয় একটি প্রোগ্রাম, যা আমি নিজেকে ব্যবহার করেছি, কেবল তাকে "গতি" বলা হয় এবং বেশিরভাগ বিতরণের জন্য উপলব্ধ। এটি বিল্ট ইন মোশন ট্রিগার (রেকর্ড এবং / অথবা স্ন্যাপশট গ্রহণ) বা অবিচ্ছিন্ন মোড রয়েছে। এটি রাস্পবেরি-পাই এর মতো সিস্টেমে কিছুটা সিপিইউ-নিবিড় হতে পারে তবে এটি অবশ্যই কাজ করে।

আপনি যদি এটিকে কিছুটা এগিয়ে নিতে চান তবে সম্ভবত একাধিক রিমোট / লোকাল ক্যামেরা চালান এবং মোশন সনাক্তকরণটি আরও শক্তিশালী কেন্দ্রীয় মেশিনে অফলোড করা হয়েছে, জোনমিন্ডারটি দেখুন। এটি সেট আপ হতে আরও বেশি সময় নেয়, এবং আমার ক্যামেরায় ফিডে ম্যানুয়ালি সঠিক রেজোলিউশন সেট করা সম্পর্কে আমার অভিজ্ঞতা রয়েছে but তবে এটি কিছুটা হলেও স্ক্রিপ্ট করা যায়।


1

আমি ইসি 2 এ এফটিপি সার্ভারের পরিবর্তে এডাব্লুএস এস 3 এবং ফাইলগুলি আপলোড করার জন্য এডাব্লুএস সি এল আই সরঞ্জাম ব্যবহার করব। এটি একটি অনেক হালকা সমাধান যা কোনও সিস্টেম প্রশাসনের প্রয়োজন। এস 3 ইসি 2 এর ভলিউমের তুলনায় অনেক বেশি টেকসই স্টোরেজ সরবরাহ করে।

সরঞ্জাম ডাউনলোড: https://aws.amazon.com/cli/

প্রাসঙ্গিক ডক্স: http://docs.aws.amazon.com/cli/latest/references/s3/

আপনি এমন একটি ব্যবহারকারী তৈরি করতে পারেন যা কেবলমাত্র আইএএম ব্যবহার করে এস 3 বালতিতে আপলোড করতে পারে (যাতে অপরাধীরা ফাইলগুলি মুছতে পারে না!)

আমি বাশ (বা পারল, নোড.জেএস, রুবি, পাওয়ারশেল?, ...) স্ক্রিপ্ট তৈরি করে এই কাজটি সম্পাদন করব যা ডেটটাইম সহ একটি ফাইল নামকে উইজেট এবং আউটপুট বলে। aws s3 cp ...ফোল্ডারের সমস্ত ফাইল আপলোড করতে লুপের জন্য কল করুন । লুপে, aws s3 cpপ্রতিটি ফাইলের জন্য প্রতিটি সফল কল অনুসারে, স্থানীয়ভাবে সংরক্ষণ করার জন্য এটিকে সংরক্ষণাগার ফোল্ডারে সরিয়ে দিন। আপনি যদি কোনও স্থানীয় সংরক্ষণাগার ব্যবহার না করতে চান তবে aws s3 mvইতিমধ্যে আপলোড করা জিনিসগুলিকে স্বয়ং-যাদুকরভাবে শুদ্ধ করুন।


দুর্দান্ত পরামর্শ এস বেইলি। আমি শেষ পর্যন্ত এই ধারণাটি নিয়ে গিয়েছিলাম, এবং বাকীগুলিকে অন্তর্ভুক্ত করেছি। ভকভগক!
Gizmo_t__ গ্রেট

1

জেন্টস - যাঁরা সাহায্য করেছেন তাদের সকলকে ধন্যবাদ। অংশ হিসাবে, আপনার সমস্ত পরামর্শ আমাকে সমাপ্ত ফলাফল পেতে সহায়তা করেছে। সুতরাং আমি আপনাকে জবাবের জন্য সমস্ত ক্রেডিট দিয়েছি তবে নীচে আমার নিজের উত্তরটি পোস্ট করেছে অন্যের পক্ষে এটি কার্যকর hope আমি বুঝতে পারি যে সাধারণত সম্পন্ন জিনিস হয় না, তবে এই ক্ষেত্রে সমাধান গঠনের অনেকগুলি ক্ষেত্র রয়েছে, তাই আমি এগুলি সমস্ত নীচের অংশে বেঁধেছি।

এডাব্লুএস এস 3 ব্যবহার করার জন্য প্রয়োজনীয় পরিষেবাগুলি ইনস্টল করুন

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

আপনার নিজস্ব অ্যামাজন অ্যাকাউন্টের মাধ্যমে এডাব্লুএস এস 3 পরিষেবাতে সাইন আপ করুন: https://aws.amazon.com/s3/

'অ্যাক্সেস কী -> নতুন অ্যাক্সেস কী তৈরি করুন' এর মাধ্যমে আপনার ব্যবহারকারীর অ্যাকাউন্টের জন্য নতুন অ্যাক্সেস কী সংজ্ঞায়িত করুন এবং যখন প্রতিশ্রুতি দেওয়া হবে তখন CSV ফাইলটি ডাউনলোড করুন। আপনি যদি এটি না করেন তবে আপনি কমান্ড লাইন S3 ফাংশনটি ব্যবহার করতে পারবেন না: https://console.aws.amazon.com/iam/home?# সুরক্ষা_সংশ্লিষ্ট

রুটকি.সি.এস.ভি. ফাইলটি খুলুন এবং তারপরে উপস্থিত অ্যাকসেসিআইআইডি মান এবং সিক্রেটকি মানটি পেস্ট করুন যখন আপনি 'আউজ কনফিগার' চালু করবেন, যখন আপনি লিনাক্সের সাথে অ্যাডাব্লুএস ব্যবহার করার আগে কমান্ড লাইন থেকে লঞ্চ করেন।

> 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-- প্রতিষ্ঠা একবার হয়ে গেলে, তার ফোল্ডারে নেভিগেট করুন

> cd mjpg_streamer

এমজেপিজি স্ট্রিমার শুরু করুন:

> 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' যদি 1 লা সেপ্টেম্বর 2016 এ 22:35 এ কার্যকর করা হয়।

একটি নতুন বাশ স্ক্রিপ্ট তৈরি করুন (যেমন মাই স্ক্রিপ্ট.শ) এবং এটিকে সম্পাদনযোগ্য অনুমতি দিন এবং এর নীচে থাকা সামগ্রীটি অনুলিপি করুন। যখন চালানো হবে, বর্তমান তারিখটি নির্দিষ্ট শেষের তারিখ না হওয়া পর্যন্ত এটি প্রতি 5 সেকেন্ডে একটি টাইমস্ট্যাম্পড জেপিজি তৈরি করবে। এই ক্ষেত্রে, এটি A তারিখ থেকে শুরু হবে এবং বি তারিখ বিতে শেষ হবে আপনার নিজের তারিখগুলি সাবস্টিটিউট করুন।

প্রাসঙ্গিক পাথগুলি প্রতিস্থাপন করে স্ক্রিপ্টে এটি অনুলিপি করুন:

#!/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

উন্নতির জন্য পরামর্শ স্বাগত জানাই।

এছাড়াও, আপনি এডাব্লুএস এস 3 এর সাথে আপনার সঞ্চয়স্থানের অগ্রগতি পরীক্ষা করতে পারেন

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

আমি প্রতি 10 সেকেন্ডে দু'ঘণ্টা ফায়ারিংয়ের জন্য রেখে দিয়েছিলাম এবং এটি 74 এমবি আপলোড জেনারেট করে। তাই আমি এক সপ্তাহের জন্য এটি 6.5 গিগাবাইট হিসাবে কাজ করি - যেখানে পরিষেবাগুলি ব্যয় শুরু করে তার জন্য মূল্য নির্ধারণের চেয়ে কম, যা আমার মনে হয় 8 জিবি।

আবার ধন্যবাদ.


1
স্থান ব্যবহারের উদ্বেগের বিষয়ে, এস 3 আপনাকে এমন কিছু সামগ্রীর জন্য জীবনচক্রের নিয়মগুলি সেট করার অনুমতি দেয় যা নির্দিষ্ট সময়ের পরে হিমবাহের মতো সস্তা স্টোরেজে (বা কেবল তাদের মুছুন) সরিয়ে দেবে। আমার আপলোডের স্ক্রিপ্টটি আমার চেয়ে বেশি সহজ যা আমার প্রতিচ্ছবি হবে ... এটি প্রশংসা। পুরো সমাধান পোস্ট করার জন্য আপনাকে ধন্যবাদ!
ট্রোগানডাররা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.