ক্রোন স্ক্রিপ্টে সিস্টেমের তারিখ / সময় ব্যবহার করা


37

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

## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql

## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql

ইত্যাদি।

আমার ক্রোনজবগুলিতে সিস্টেমের তারিখ এবং / অথবা সময়কে কোনও ধরণের পরিবর্তনশীল হিসাবে ব্যবহার করার কোনও উপায় আছে কি? যদি তা না হয় তবে তা কার্যকর করার জন্য আপনার পরামর্শগুলি কী?

উত্তর:


45

আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন (নীচে গ্লেন জ্যাকম্যান নোট হিসাবে, আপনাকে সমস্ত %অক্ষর থেকে বাঁচতে হবে ):

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

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

পলায়নের ছাড়া %, রেডহ্যাট এন্টারপ্রাইজ লিনাক্স 5.0 এ "ক্রন" (আমি মনে করি) আমার একটি মানানসই খোঁজার না সম্পর্কে ত্রুটি দান রাখা )। এর কারণ হ'ল অনেস্ক্যাপেডের পরে সমস্ত কিছুই %কমান্ডের স্ট্যান্ডার্ড ইনপুটটিতে প্রেরণ করা হয়।

আমি বর্ণসূচকভাবে %Fবাছাই করার সময় ফাইলের নাম তারিখ অনুসারে অর্ডার করার জন্য ISO8601 তারিখের ফর্ম্যাট (yyyy-mm-dd, যা ) ব্যবহার করার জন্যও সুপারিশ গ্রহণ করব ।


23
dateএকটি ক্রোনফিলের ভিতরে সতর্কতা অবলম্বন করতে হবে : কিছু ক্রোন (সমস্ত?) %কমান্ডের শেষে হিসাবে বিবেচনা করে। (সুতরাং $()সমস্যা ছিল না)। আপনাকে সমস্ত শতাংশ লক্ষণগুলি থেকে বাঁচতে হবে: ... touch "/tmp/$(date +\%Y-\%m-\%d)"(
ডিক্স

2
গ্লেন জ্যাকম্যান সঠিক: উপরের ক্রন্টব এন্ট্রিতে '%' অক্ষরগুলি থেকে বেরিয়ে আসা। এই মত একটি RHEL 5.0 নিম্নলিখিতরূপে crontab পরিবর্তন এন্ট্রি দেখায়: "- \% মি - \% ঘ) .sql /tmp/backup.$(date + + \% ওয়াই" 50 11 * * * স্পর্শ
ব্রুস Ediger

এটি লক্ষণীয় যে সাবসেল ব্যবহার করা পরিবেশের পরিবর্তনশীল হিসাবে কাজ করে না। সুতরাং, DATE=$( date -I )এবং তারপরে কাজের কমান্ড-লাইনে ${DATE}আক্ষরিক ব্যবহারের ফলাফলগুলি পরে ব্যবহার করা $( date -I )
ক্রিস্টোফার শুল্টজ

1
মনে হচ্ছে %ওপেনসুস 42 তেও পালানো জরুরি।
কেগ্রাডেক

7

আপনি ব্যবহার করতে সক্ষম হওয়া উচিত date
টাইপ করুন info dateবা man dateবিশদ জন্য।

নীচের মতো কিছু আপনার উপযুক্ত হতে পারে (আপনার প্রয়োজনের জন্য তারিখের ফর্ম্যাটটি পরিবর্তন করুন)

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension

আবার %ক্রোনটির অভ্যন্তরে সমস্ত অক্ষর থেকে বাঁচতে সাবধান হন ।
গ্লেন জ্যাকম্যান

@ লেগেন: ওফ, নিশ্চিত লিক্সোগ্রাফিক অর্ডার হিসাবে, আমি কেবল ওপি'র তারিখের ফর্ম্যাটটির সাথে মেলে। আমি ব্যক্তিগতভাবে আপনার মত আইএসও ফর্ম্যাটটি পছন্দ করি।
asoundmove


1

আমি ব্যাশ স্ক্রিপ্টটি এখানে ব্যবহার করেছি:

#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz

ফাইলগুলি দেখতে দেখতে:

backup2011-03-02_15:16:46.sql.gz

রাত্রে চালানো বা আপনি যা পছন্দ করেন তা চালানোর জন্য ক্রোন জবটিকে এখানে নির্দেশ করুন।


এটি একটি কবজির মতো কাজ করে। যদিও, আমি এখানে কি ঘটছে তা বেশ বুঝতে পারি না। ব্যাকটিকগুলি অন্য প্রোগ্রাম বা আউটপুট অন্তর্ভুক্ত করার অনুমতি দেয়? বিন্যাস সম্পর্কে কী (যেমন +% F এবং এরকম)?
এয়ারক্রস

1
হ্যাঁ ব্যাকটিকগুলি কমান্ড প্রতিস্থাপন সম্পাদন করে যেখানে আউটপুটটি কমান্ডের পরিবর্তে প্রতিস্থাপিত হয়। বিভাগ 3.4.5 পড়ুন এখানে ডেটা লিঙ্কটির

ওহ, বাহ, এটি একটি আশ্চর্যজনক সম্পদ। সর্বদা শেখা চালিয়ে রাখা দুর্দান্ত। লিঙ্ক জন্য আপনাকে অনেক ধন্যবাদ!
21:

0

একটি ছোট মোড়ক স্ক্রিপ্ট লিখুন যা dateকমান্ডটি ব্যবহার করে এবং আপনার ব্যাকআপ কমান্ডকে কল করে।

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.