linux - ক্রোন জব দ্বারা তৈরি লগ ফাইল পরিচালনা করা




bash unix (2)

আমার একটি ক্রোন জব রয়েছে যা এটির লগ ফাইলটি প্রতিদিন আমার হোম ফোল্ডারে অনুলিপি করে।

প্রতিদিন এটি গন্তব্য ফোল্ডারে বিদ্যমান ফাইলটিকে ওভাররাইড করে, যা প্রত্যাশিত। আমি আগের তারিখগুলি থেকে লগটি সংরক্ষণ করতে চাই যাতে পরের বার এটি গন্তব্য ফোল্ডারে ফাইলটি অনুলিপি করে, এটি আগের তারিখগুলি থেকে ফাইলগুলি সংরক্ষণ করে।

আমি কেমন করে ঐটি করি?


ক্রোন লগগুলি পরিচালনা করার সর্বোত্তম উপায় হ'ল প্রতিটি কাজের চারপাশে একটি মোড়ক রাখা। মোড়ক দিয়ে সর্বনিম্ন এই জিনিসগুলি করতে পারে:

  • পরিবেশকে আরম্ভ করুন
  • stdout এবং stderr লগ ইন পুনর্নির্দেশ
  • কাজ চালান
  • কাজ সফল হয়েছে কিনা তা পরীক্ষা করে দেখুন
  • প্রয়োজনে বিজ্ঞপ্তি প্রেরণ করুন
  • লগ আপ পরিষ্কার করুন

ক্রোন মোড়কের খালি হাড়ের সংস্করণ এখানে:

#!/bin/bash

log_dir=/tmp/cron_logs/$(date +'%Y%m%d')
mkdir -p "$log_dir" || { echo "Can't create log directory '$log_dir'"; exit 1; }

#
# we write to the same log each time
# this can be enhanced as per needs: one log per execution, one log per job per execution etc.
#
log_file=$log_dir/cron.log

#
# hitherto, both stdout and stderr end up in the log file
#
exec 2>&1 1>>"$log_file"

#
# Run the environment setup that is shared across all jobs.
# This can set up things like PATH etc. 
#
# Note: it is not a good practice to source in .profile or .bashrc here
#
source /path/to/setup_env.sh

#
# run the job
#
echo "$(date): starting cron, command=[$*]"
"[email protected]"
echo "$(date): cron ended, exit code is $?"

আপনার ক্রোন কমান্ড লাইনটি দেখতে পাবেন:

/path/to/cron_wrapper command ...

এটি একবার হয়ে গেলে, আমাদের cron_log_cleaner নামে আরও একটি কাজ cron_log_cleaner যা পুরানো লগগুলি সরিয়ে ফেলতে পারে। ক্রোন র‍্যাপার থেকে নিজেই শেষে লগ ক্লিনারটি কল করা কোনও খারাপ ধারণা নয়।

একটি উদাহরণ:

# run the cron job from command line
cron_wrapper 'echo step 1; sleep 5; echo step 2; sleep 10'

# inspect the log
cat /tmp/cron_logs/20170120/cron.log

মোড়কযুক্ত ক্রোন কাজ চালানোর পরে লগটিতে এটি থাকবে:

Fri Jan 20 04:35:10 UTC 2017: starting cron, command=[echo step 1; sleep 5; echo step 2; sleep 10]
step 1
step 2
Fri Jan 20 04:35:25 UTC 2017: cron ended, exit code is 0

সন্নিবেশ

`date +%F`

আপনার cp কমান্ড, এই মত:

cp /path/src_file /path/dst_file_`date +%F`

সুতরাং এটি src_file কে dst_file_2017-01-20 src_file অনুলিপি করবে

upd:

@ ট্রিপলির লক্ষ্য হিসাবে, % চরিত্রটি cron থেকে পালাতে হবে, সুতরাং আপনার ক্রোন জবটি এর মতো দেখাবে:

0 3 * * * cp /path/src_file /path/dst_file_`date +\%F`





cron