ক্রন্টব আউটপুটের জন্য লগটিতে আপনি কীভাবে একটি তারিখের পরিবর্তনশীল সেট করবেন?


10

আমি কিছু তারিখের মত বৈচিত্র নিয়ে আড্ডেন খেলছিলাম

DATE = $(date)

তবে তা কোনও কাজই করেনি

crontab -e

CRONLOG=/tmp/log/crontab.log
DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
* * * * * echo $DATEVAR >> /tmp/log/crontab.log
*/2 * * * * echo "$DATEVAR hello" >> ${CRONLOG}
*/1 * * * * echo 'every minute' >> ${CRONLOG}

এটি ঠিক যেমন পাঠ্যকে আউটপুট করে ...

আমি প্রতিটি আপডেটে টাইমস্ট্যাম্প সহ crontab.log এ একটি লগ এন্ট্রি তৈরি করতে চাই

আমি এটি সেন্টোস 6 এ কীভাবে করতে পারি?

হালনাগাদ

DATEVAR=date +20%y%m%d_%H%M%S
*/1 * * * * /bin/echo [CRON] $($(DATEVAR)) >> /tmp/log/crontab.log

আমি যখন চেষ্টা করেছি তখন কেবলমাত্র [ক্রোন] এবং কিছুই রেন্ডার করা হয়নি = /

উত্তর:


28

ক্রোন শেল নয় - এটি শেল যেমন কমান্ডকে পার্স করে না। এই হিসাবে, আপনার ভেরিয়েবলটি যেমন স্থির পাঠ্য হিসাবে নির্ধারিত হয়।

এই সমস্যার জন্য আমি তিনটি সমাধান জানি:

বিকল্প 1: আপনার কমান্ড তৈরি করতে একটি শেল স্ক্রিপ্ট ব্যবহার করুন, আপনি যা চান ভেরিয়েবল এবং যুক্তি যুক্ত করুন - এবং ক্রোন থেকে সেই শেল স্ক্রিপ্টটি কল করুন।

* * * * * /path/to/myscript.sh

myscript.sh:

DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
echo $DATEVAR >> /tmp/crontab.log

বিকল্প 2: আপনার কমান্ডে ডেট কমান্ডটি সরাসরি অন্তর্ভুক্ত করুন এবং যেহেতু পুরো কমান্ডটি শেলের কাছে চলে গেছে, তারিখটি প্রক্রিয়া করা হবে এবং একটি আসল তারিখের সাথে প্রতিস্থাপন করা হবে।

* * * * * /bin/echo `date +20\%y\%m\%d_\%H\%M\%S` >> /tmp/crontab.log

বিকল্প 3: ক্রোনে স্ট্রিং ভেরিয়েবল সেট করুন এবং প্রসেস করার জন্য এটি আপনার কমান্ডে প্রেরণ করুন (দ্রষ্টব্য - শতাংশ চিহ্নগুলি এড়ানোর দরকার নেই, এবং পৃথক শেলের মধ্যে এটি কার্যকর করতে ভেরিয়েবলটি নিজেই $ () এ মোড়ানো থাকে - ব্যাকটিক্স একই কাজ করা উচিত):

DATEVAR=date +20%y%m%d_%H%M%S
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

(উপরের সমস্ত ক্ষেত্রে, আপনি অবশ্যই 'হার্ড কোডিং' এর পরিবর্তে লগ পাথের জন্য একটি পরিবর্তনশীল ব্যবহার করতে পারেন))


1
মহান প্রতিক্রিয়া +1 টি করার জন্য ধন্যবাদ, আমি নিম্নলিখিতরূপে crontab পরিবর্তন থেকে এটি যোগ করার চেষ্টা করেছিলেন কিন্তু যে Didnt কাজ করছেন = / এটি উপস্থাপনা DATEVAR কখনো
qodeninja

আমি এটি কেবল একটি RHEL / CentOS6 সামঞ্জস্যপূর্ণ সিস্টেমে করেছি এবং এটি প্রত্যাশিত ফলাফল দিয়েছে (যেমন তারিখের সাথে ফাইলটিতে একটি নতুন লাইন যুক্ত হয়েছে)। উপরের 3 টির মধ্যে কোন বিকল্পটি আপনি ব্যবহার করে দেখেছেন এবং ফলাফলটি কী ছিল - সুনির্দিষ্ট - এবং / var / লগ / ক্রোনটিতে কোনও ত্রুটি ছিল? (আপনি যদি স্ক্রিপ্ট বিকল্পটি ব্যবহার করেন, ক) chmod + x এবং b এ ভুলে যাবেন না) এটির আগে নিজেরাই চেষ্টা করুন (অর্থাত ক্রোন দিয়ে নয়))
সাইবারএক্স

1
বিকল্প 3 =], আমি আগে এটি করার চেষ্টা করেছি কিন্তু এটি রেন্ডার হয়নি। তবে এখন আপনি লক্ষ করছেন আপনি কিছু লিল ডিফারেন্ট করেছেন। কেন আপনি double ($ (তারিখ)) দ্বিগুণ করলেন? উপরে আমার আপডেট দেখুন
qodeninja

1
আপনি যে আপডেটটি যুক্ত করেছেন তাতে টাইপো রয়েছে - এটি হয় $($DATEVAR)না $($(DATEVAR))। এটিকে এভাবে ভাবুন - $()- যা বাইরের বন্ধনী - বন্ধনীগুলির মধ্যে যা আছে তা প্রক্রিয়া করার জন্য একটি নতুন শেল প্রবর্তন করে। এই ক্ষেত্রে, পরিবর্তনশীল $ DATEVAR একটি স্ট্রিংয়ে সেট করা হয় এবং শেলের কাছে দেওয়া হয়। $(DATEVAR)কিছুই নয় - কারণ DATEVARএটি কিছুই নয় (যেমন এটি ভেরিয়েবল হিসাবে চিহ্নিত করতে কোনও missing অনুপস্থিত)। আপনি $DATEVARএকই ফলাফল পেতে চারপাশে ব্যাকটিকগুলি ব্যবহার করতে পারেন
সাইবারএক্স ৮86

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