ক্রোন ট্যাব কাজের ভিতরে আমি কীভাবে `তারিখ` নির্বাহ করতে পারি?


117

আমি ক্রোন স্ক্রিপ্টের জন্য একটি লগ ফাইল তৈরি করতে চাই যাতে লগ ফাইলের নামটিতে বর্তমান সময় থাকে। এই আদেশটি আমি ব্যবহার করার চেষ্টা করেছি:

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log

দুর্ভাগ্যক্রমে আমি এই বার্তাটি পাই যখন এটি চলে:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

আমি dateবিভিন্ন উপায়ে অংশটি পালানোর চেষ্টা করেছি , তবে অনেক ভাগ্য ছাড়াই। কোনও ক্রন্টব ফাইলের মধ্যে এটি লাইনটি তৈরি করা সম্ভব বা এটি করার জন্য আমার কি শেল স্ক্রিপ্ট তৈরি করা দরকার?

উত্তর:


180

সংক্ষিপ্ত উত্তর:

%হিসাবে পালাও \%:

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+\%d"`.log

দীর্ঘ উত্তর:

ত্রুটি বার্তাটি পরামর্শ দেয় যে আপনার শৃঙ্খলা কার্যকর করে যে শেলটি দ্বিতীয় পিছনের টিক চরিত্রটি দেখতে পাবে না:

/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'

আপনি অন্য উত্তরের একটির চেষ্টা করার সময় এটি প্রাপ্ত দ্বিতীয় ত্রুটি বার্তার দ্বারা এটিও নিশ্চিত করা হয়েছে:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'

নিম্নলিখিতরূপে crontab পরিবর্তন র manpage নিশ্চিত করে যে কমান্ড শুধুমাত্র প্রথম unescaped পর্যন্ত পড়া হয় %সাইন ইন:

"ষষ্ঠ" ক্ষেত্র (বাকী রেখাটি) চালানোর জন্য আদেশটি নির্দিষ্ট করে। লাইনের পুরো কমান্ড অংশ, একটি নতুন লাইন বা %চরিত্র পর্যন্ত ক্রোনফিলের ভেরিয়েবলে /bin/shনির্দিষ্ট শেল দ্বারা বা সম্পাদন করা হবে SHELLকমান্ডের শতকরা চিহ্ন ( %) , ব্যাকস্ল্যাশ ( \) সহ অবতরণ না করা হলে নতুন লাইনের অক্ষরে রূপান্তরিত হবে এবং প্রথমটির পরে সমস্ত তথ্য %স্ট্যান্ডার্ড ইনপুট হিসাবে কমান্ডে প্রেরণ করা হবে।


আমার অজ্ঞতার জন্য দুঃখিত, তবে আপনি এই ত্রুটি বার্তাগুলি কোথায় দেখছেন? আমি যখন 'গ্রেপ সিআরএন / ভার / লগ / সিসলগ' করি তখন আমি কোনও ত্রুটি বার্তা দেখতে পাচ্ছি না যদিও ক্রোন ব্যর্থ হয়েছে - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
তেবে

2
@ Копать_Шо_я_нашел ক্রোন ত্রুটি বার্তা সহ একটি ইমেল পাঠাবে,
জেসেন

3
date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-ক্রোনলগ
ডেভিলকোড

7

আপনি নিজের কমান্ডগুলি শেল ফাইলে রাখতে পারেন এবং তারপরে ক্রোন দিয়ে শেল ফাইলটি চালিত করতে পারেন।

jobs.sh

echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log

ক্রন

0 * * * * sh jobs.sh

6

আপনি (পুরো স্ট্রিং অনুরূপ এড়াতে) একটি পরিবর্তনশীল তারিখ বিন্যাস স্ট্রিং করতে, চান তাহলে না অব্যাহতি %এবং না রাখা$()

উদাহরণস্বরূপ, স্ট্রিং ঘোষণার সময়, কেবল লিখুন:

DATEVAR=date +%Y%m%d_%H%M%S

তারপরে, এর সাথে ক্রোন স্টেটমেন্ট লিখুন $($VARIABLE_NAME):

* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

ধন্যবাদ cyberx86 , তার / তার উত্তরServerFault আরো সম্পন্ন হতে পারে:


1
তারিখ = "তারিখ +% Y% মি% d_% এইচ% এম% এস"
ফ্রাঙ্ক ফ্যাং

3

ক্রোনে, আপনি এই সাধারণ বাক্য গঠনটি ব্যবহার করতে পারেন:

*/15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +\%Y\%m\%d).log 2>&1

আউটপুট তারিখের ফর্ম্যাটটি
ক্রোন_20180123.

(1) আপনি কী বলছেন যা ইতিমধ্যে গৃহীত উত্তর দ্বারা বলা হয়নি? (২) আপনার উত্তর প্রশ্নের চেয়ে অনেক জটিল। উদাহরণস্বরূপ, আপনি -dবিকল্পটি যুক্ত করেছেন , যা প্রশ্নটিতে ব্যবহৃত হয় না (এবং আপনি এটি ব্যাখ্যা করেননি)। আপনি এই "সাধারণ বাক্য গঠন" বলার ন্যায্যতা কি?
জি ম্যান

2

উপরের সমস্ত উত্তর ডাবল উক্তি ব্যবহার করে (তাদের সবগুলিই আমার সেটআপের জন্য কাজ করে না)। এটি আমার পক্ষে কাজ করেছে:

0 5 * * 3 /data/script.sh > /data/script_`date +\%y\%m\%d`.log 2>&1

1
আপনি কী বলছেন যা ইতিমধ্যে গৃহীত উত্তর দ্বারা বলা হয়নি? আপনি কি বলছেন যে এটি উদ্ধৃতিগুলির চেয়ে কোট ছাড়াই ভাল কাজ করে? (ইঙ্গিত: এটি খুব অসম্ভব))
জি ম্যান

গৃহীত উত্তরটি কেবল আমার পক্ষে কাজ করে না। এই এক।
ম্যানুয়েল স্মিটজবার্গার

0

একটি প্রাথমিক সমাধান:

  • ব্যবহার $()নির্বাহ জন্য dateকমান্ড আসতে আউটপুট
  • ইউটিসিতে ডেটটাইম বিন্যাস করুন, %সাথে অক্ষরটি এড়ান\
  • যোগ 2>&1উভয় স্ট্রিমিং করার জন্য শেষে stdoutএবং stderrযে লগ ফাইলে

উদাহরণ:

* * * * * echo "Test crontab log" > /tmp/crontab.log.$(date --utc +\%Y\%m\%d_\%H\%M\%SZ) 2>&1

আউটপুট:

ls -lh /tmp | grep log

-rw-rw-r-- 1 ubuntu  ubuntu    17 May  4 05:06 crontab.log.20190504_050601Z
-rw-rw-r-- 1 ubuntu  ubuntu    17 May  4 05:07 crontab.log.20190504_050701Z
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.