আমি ক্রোনটবে না লাগানো পর্যন্ত আরসিএনসি ঠিকঠাক কাজ করে (আপডেট: 'তারিখ' ক্রন্টবায় কাজ করে না)


3

আমি এই rsyncকমান্ডটি পেয়েছি যা কমান্ড লাইন (উবুন্টু সার্ভার 12.04.1 এলটিএস) থেকে চালানোর সময় ঠিক কাজ করে। আমি এটি প্রতি ঘন্টা, ঘন্টা এবং দৌড়তে চাই এবং ফলাফলগুলি (ত্রুটি সহ) একটি লগ ফাইলে আউটপুট করব। কমান্ডটি আমি ক্রোন্টাবের মধ্যে রেখেছি:

0 * * * * root rsync -av --delete -e "ssh -i /root/.ssh/id_rsa" 
user@host:/path/to/dir/ user@host:/path/to/another/dir/ /destination/dir
--exclude='.DS_Store' &> /var/log/backup/`date '+%Y_%m_%d_%H:%M'`_hourlybackup.log

বাশের কাছ থেকে যেমনটি প্রত্যাশা করা হয়েছিল ঠিক তেমনভাবে কাজ করা সত্ত্বেও, যখন এটি ক্রন্টবলে থাকে তখন কিছুই হয় না। এমনকি এটি ফাইলটিতে কোনও ত্রুটিও লেখেন না। দৌড়ানো ps aux | grep rsyncআগ্রহের কিছুই দেখায় না। আমি সমস্যাটি খুঁজে পাচ্ছি না। কোন ধারনা?

আপডেট: আমি যে উত্তরগুলি পেয়েছি সেগুলির জন্য ধন্যবাদ আমি কমান্ডটি টুইঙ্ক করতে সক্ষম হয়েছিল যাতে এটি সঠিকভাবে কাজ করে, যদিও তাদের কেউই নিজেরাই সমস্যাটি সমাধান করেনি। আজ সকালে যা কাজ পেয়েছি তা এখানে:

0 * * * * /usr/bin/rsync -av --delete -e "ssh -i /root/.ssh/id_rsa" 
user@host:/path/to/dir/ user@host:/path/to/another/dir/ /destination/dir
--exclude='.DS_Store' > /var/log/backup/_hourlybackup.log 2>&1   

কোনও কারণে date '+%Y_%m_%d_%H:%M'(ব্যাকটিক্সে আবদ্ধ) সমস্যাটি সৃষ্টি করছে। যদি আমি কমান্ড থেকে এটি সরিয়ে ফেলি তবে এটি ঠিক কাজ করে ... যদিও আমার কাছে গুরুত্বপূর্ণ যে আমার কাছে ব্যাকআপ লগ রয়েছে, তাই আমি এখনও এর সমাধান পেতে চাই। আমি এটিকে হ্যাক করেই রাখব, তবে যদি কেউ জানে তবে আমার অতিথি হয়ে উঠুন।


আপনি কোন ক্রন্টব এ রেখেছেন?
পল

আমি এটি ব্যবহার করে মূলের মধ্যে রেখেছি sudo crontab -e। আমি বুঝতে পেরেছিলাম যে আমি একটি ভুল করেছি এবং এটি ব্যবহারকারীর মূল ব্যবহারের জন্য স্পষ্ট করে বলার দরকার নেই, তাই আমি এটিকে সরিয়ে দিয়েছি, তবে কিছুই পরিবর্তন হয়নি। আমি এটিকে অনুলিপি করার চেষ্টাও করেছি /etc/crontab, তবে এটিও কার্যকর হয়নি। এফওয়াইআই অন্যান্য, সহজ ক্রোন কমান্ডগুলি সূক্ষ্মভাবে কাজ করে - echo 'lol' > test.outউদাহরণস্বরূপ works
জেরেমি সুইনার্টন

এইভাবেই এটি লেখার কথা। তারিখ একটি কমান্ড এবং স্ট্রিং একটি বিকল্প। এটি আপনার কনসোলে প্রবেশ করার চেষ্টা করুন।
জেরেমি সুইনার্টন

আমি এখন উইন্ডোজ ব্যবহার করছি lol
khaled_webdev

উত্তর:


1

সমস্যাটি যেমনটি আমি আপডেটে উল্লেখ করেছি dateকমান্ডটি দিয়ে। দেখা যাচ্ছে, আপনি যদি কমান্ডটি সরাসরি crontabশেল স্ক্রিপ্টে না লিখে লিখে থাকেন তবে আপনাকে বিকল্প স্ট্রিংয়ের %মধ্যে এড়াতে হবে date। এখানে কাজ শেষ হয়েছে:

0 * * * * rsync -av --delete user@host:/path/to/dir 
user@host:/path/to/another/dir /path/to/destination
--exclude='.DS_Store' >
/var/log/backup/`date '+\%Y_\%m_\%d_\%H'`h_hourlybackup.log 2>&1

যারা আমাকে এটিকে বের করতে সাহায্য করেছেন তাদের জন্য ধন্যবাদ। এই কমান্ডটি সম্ভবত ভবিষ্যতে আরও দীর্ঘ এবং আরও জটিল হয়ে উঠবে এবং এটি তার নিজস্ব শেল স্ক্রিপ্টের জন্য আরও উপযুক্ত হবে তবে আপাতত এটি সরাসরি ঠিক আছে crontab, আমি মনে করি।


0

বেশিরভাগ সময় এটি কারণ আপনি নিজের rsync পছন্দ মতো কোনও পূর্ণ পথ তৈরি করেন নি

/usr/bin/rsync -av ...

এছাড়াও আপনি একটি ছোট শেল স্ক্রিপ্ট তৈরি করার চেষ্টা করতে পারেন এবং সেই আদেশটি সেখানে রাখতে পারেন এবং কেবলমাত্র আপনার ক্রোন থেকে single একক স্ক্রিপ্ট কার্যকর করতে পারেন


হুঁ। দু'জনের চেষ্টা করেও দুর্ভাগ্যক্রমে দু'জনেরই কাজ হয়নি। আমি এটি rsyncদিয়ে প্রতিস্থাপন করেছি /usr/bin/rsyncএবং এটি সমস্ত শেল স্ক্রিপ্টের ভিতরে ফেলে দিয়েছি । কমান্ড লাইন থেকে স্ক্রিপ্ট চালানো কাজ করে তবে এটি ক্রোনটবে যাবে না। চিত্রে যান.
জেরেমি সুইনার্টন

0

এটি কোনও পাথের সমস্যা হতে পারে, তবে শিকড়টি যেহেতু /usr/binতার পথে চলবে তা সম্ভবত নয় ।

যাইহোক, crontab কমান্ডগুলি সম্ভবত ব্যাশ দিয়ে চালানো হয় না, তবে ড্যাশ&>কনস্ট্রাক্ট একটি "Bashism" হয় [ 1 ] [ 2 ]।

প্রতিস্থাপন করা

command >& file

সঙ্গে

command > file 2>&1

এটি ড্যাশ হিসাবে ইচ্ছাকৃতভাবে কাজ করতে।


0

আপনার আরএসএনসি কমান্ডটি একটি ক্রোশাবের সাথে চালু করতে একটি .sh (শেল) স্ক্রিপ্টে রাখুন

  • এই নমুনার মতো শেল স্ক্রিপ্ট সম্পর্কে অনুসন্ধান করুন

    test.sh

#! / বিন / SH

echo $2 echo $1
  • আপনার স্ক্রিপ্টে আপনার ব্যাকআপ ফাইলটির নাম দিতে এই সিনট্যাক্সটি ব্যবহার করুন

এখন = $ (তারিখ + "% m_% d_% Y")

.. &> /var/log/backup/{$now}_hourlybackup.log

0

চেক করা উত্তরের জন্য কেবল মন্তব্য করতে পারতেন তবে নতুন এবং এখনও মন্তব্য করতে পারে না।

আপনি কেন এই সমস্যাটি দেখছেন তা আমি কেবল ব্যাখ্যা করতে চেয়েছিলাম। % স্ট্যান্ডিন হিসাবে কমান্ড সরবরাহ করার পরে একটি নতুন লাইন এবং যে কোনও পাঠ্যকে চিহ্নিত করে।

সুতরাং আপনার ক্রোন কমান্ড:

rsync -av --delete -e "ssh -i /root/.ssh/id_rsa" user@host:/path/to/dir/ \
  user@host:/path/to/another/dir/ /destination/dir --exclude='.DS_Store' \
  &> /var/log/backup/`date '+%Y_%m_%d_%H:%M'`_hourlybackup.log

ব্যাখ্যা করা যায়:

rsync -av --delete -e "ssh -i /root/.ssh/id_rsa" user@host:/path/to/dir/ \
  user@host:/path/to/another/dir/ /destination/dir --exclude='.DS_Store' \
  &> /var/log/backup/`date '+<<EOI
Y_
m_
d_
H:
M'`_hourlybackup.log
EOI

শেল যখন এটি চালানোর চেষ্টা করে, এটি দ্বিতীয়টি খুঁজে পায় না `কারণ এটি এখন কমান্ডের স্টিডিনের অংশ হিসাবে উপস্থিত রয়েছে। মূলটি হ'ল বুঝতে হবে যে সমস্ত% টি অক্ষরকে এড়িয়ে চলা দরকার যদি না আপনি সত্যিই নিউলাইনগুলি চান না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.