প্রশ্ন কিভাবে স্ক্রিপ্ট লগ bash একটি টাইমস্ট্যাম্প যোগ করতে?


আমার একটি ক্রমাগত চলমান স্ক্রিপ্ট রয়েছে যা আমি একটি লগ ফাইলে আউটপুট করি:

script.sh >> /var/log/logfile

আমি লগ যোগ করা প্রতিটি লাইন আগে একটি টাইমস্ট্যাম্প যোগ করতে চাই। ভালো লেগেছে:

Sat Sep 10 21:33:06 UTC 2011 The server has booted up.  Hmmph.

আমি কি কোন জুটিসু ব্যবহার করতে পারি?


77
2017-09-10 21:35


উত্স


এই questin দেখুন। serverfault.com/questions/80749/...। একটি দম্পতি উত্তর এখানে প্রযোজ্য হবে। - Zoredache
একটি awk / gawk সমাধান জন্য দেখুন: stackoverflow.com/questions/21564/... - User


উত্তর:


আপনি একটি লুপের মাধ্যমে স্ক্রিপ্টের আউটপুটটি পাইপ করতে পারেন যা বর্তমান তারিখ এবং সময়কে উপসর্গ করে:

./script.sh | while IFS= read -r line; do echo "$(date) $line"; done >>/var/log/logfile

যদি আপনি এটি অনেক ব্যবহার করেন তবে লুপটি পরিচালনা করতে একটি ব্যাশ ফাংশন তৈরি করা সহজ।

adddate() {
    while IFS= read -r line; do
        echo "$(date) $line"
    done
}

./thisscript.sh | adddate >>/var/log/logfile
./thatscript.sh | adddate >>/var/log/logfile
./theotherscript.sh | adddate >>/var/log/logfile

79
2017-09-10 21:58



@ নাইলস এটি রোধ করার একটি কৌশল read শুরুতে এবং লাইন থেকে সাদা জায়গা trimming থেকে। এটি আইএফএস (ব্যাশের অভ্যন্তরীণ ক্ষেত্র বিভাজক, মূলত হোয়াইটস্পেস অক্ষরগুলির একটি তালিকা) সেট করে read কমান্ড। - Gordon Davisson
... এবং -আর পালাবার চরিত্র "\" উপেক্ষা করে। এই সব ক্ষেত্রে সত্যিই কাজ করা উচিত - স্ক্রিপ্টিং মহান পিস। - Nils
@ নিলস এটির কিছু বাস্তবায়নের পরে সম্পূর্ণ বুলেটপ্রুফ নয় echo অব্যাহতি ক্রম ব্যাখ্যা। আপনি যদি সত্যিই এটা কন্টেন্ট সঙ্গে জগাখিচুড়ি না চান (তারিখ যোগ ছাড়া), প্রতিস্থাপন echo সঙ্গে কমান্ড printf "%s %s\n" "$(date)" "$line" - Gordon Davisson
আপনি একটি আগ্রহী হতে পারে ISO-8601 সঙ্গতিপূর্ণ তারিখ / টাইমস্ট্যাম্প: date -u +"%Y-%m-%dT%H:%M:%SZ" অথবা হয়তো আরো সুন্দর date +"%Y-%m-%d %T"। - Pablo Bianchi
এই স্ক্রিপ্ট প্রত্যাশিত হিসাবে কাজ করে, এটি একটি নতুন প্রক্রিয়া spawns (চালানো date) জন্য প্রতি লগ লাইন, যা আপনার মেশিন এবং লগের পরিমাণের উপর নির্ভর করে একটি গুরুতর ত্রুটি হতে পারে। আমি বরং ব্যবহার করার পরামর্শ দিতে হবে ts যদি পাওয়া যায়, @ উইলম থেকে উত্তর দেখুন - Michael Schaefers


উবুন্টু "moreutils" pkg থেকে "ts" দেখুন:

command | ts

বা, যদি $ কমান্ড স্বয়ংক্রিয় বাফারিং করে থাকে (প্রত্যাশা-dev pkg প্রয়োজন):

unbuffer command | ts

41
2017-10-29 15:20





আপনি সহজেই করতে পারেন প্রতিধ্বনি কমান্ড logfile আউটপুট আউটপুট। অর্থাত,

echo "`date -u` `./script.sh`" >> /var/log/logfile

এটা সত্যিই কাজ করেছে :)

উদাহরণ:

[sparx@E1]$ ./script.sh 
Hello Worldy
[sparx@E1]$ echo "`date -u` `./script.sh`" >> logfile.txt
[sparx@E1]$ cat logfile.txt 
Mon Sep 12 20:18:28 UTC 2011 Hello Worldy
[sparx@E1]$ 

11
2017-09-10 22:03



হুম আমার জন্য কাজ করছে না। - Antonius Bloch
কমান্ডটি চালানোর সময় আপনি কী পাচ্ছেন? - SparX
এটি './script.sh' এর সমগ্র আউটপুট আগে প্রতিটি টাইম আগে টাইমস্ট্যাম্প রাখে। - clacke


দ্য তারিখ কমান্ড যে তথ্য প্রদান করবে

date -u
Sat Sep 10 22:39:24 UTC 2011

তাই আপনি যা করতে পারেন

echo $(date -u) "Some message or other"

আপনি চেয়েছিলেন কি হল ?


10
2018-02-03 17:23



তারিখ কমান্ডটি ব্যবহার করা আমার মনে যা ধরনের ছিল, তবে আমি সত্যিই স্ক্রিপ্টটিতে এটি যোগ করতে পারছি না, তাই আমি যা খুঁজছি তা হল এই লাইনটি পরিবর্তন করার একটি উপায়: "script.sh >> / var / লগ / logfile "তারিখ যোগ করুন। - Antonius Bloch
সেই ক্ষেত্রে আপনার স্ক্রিপ্টের আউটপুটটিকে একটি নামযুক্ত পাইপে পুনঃনির্দেশিত করুন এবং একটি ডেমনকে আউটপুটের জন্য শোনাচ্ছে যা স্ক্রিপ্ট আউটপুট নেয় এবং এটি একটি লগ ফাইলে লেখার আগে একটি তারিখ যোগ করে। আপনি সম্ভবত পরিবর্তন করতে পারেন স্ক্রিপ্ট আমি লিখেছি এই কাজ করতে এখানে। আমি এটা করতে চাই কারণ এটি আমার আগ্রহ রাখে কিন্তু এটি যুক্তরাজ্যে দেরী হয়ে গেছে এবং আমার আগামীকাল শুরুতে শুরু হবে। - Iain


একটি করুন config.sh ফাইল

#!/usr/bin/env bash
LOGFILE="/path/to/log.log"
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`

যখন আপনি লগ ফাইল ব্যবহারের জন্য পাঠাতে হবে

#!/usr/bin/env bash
source /path/to/config.sh

echo "$TIMESTAMP Say what you are doing" >> $LOGFILE

do_what_you_want >> $LOGFILE

লগ ফাইল মত দেখতে হবে

2013-02-03 18:22:30 Say what you are doing

সুতরাং তারিখ দ্বারা বাছাই করা সহজ হবে


7
2017-09-12 20:34



আপনার "config.sh" 'একবার' 'একবার' 'চালানো হবে' 'উত্স ... / config.sh' '। - clacke


আপনি চাইছেন:

(date && script.sh) >> /var/log/logfile

5
2018-04-27 16:45



আমার ঈশ্বর, মানুষ, সবাই ফিরে টিক প্রতিস্থাপন, নাম পাইপ, ইত্যাদি করছেন। শুধু জন্ম কমান্ড এবং স্ক্রিপ্ট উভয় বন্ধনী আবৃত! মাল্টি লাইন আউটপুট এবং লোগুলির প্রতিটি তারিখের সাথে লগটিকে সুন্দর লাগার প্রয়োজন হলে ফাংশনটি থাকা ব্যক্তিটির একটি বৈধ কেস রয়েছে তবে এই সমাধানগুলির মধ্যে বেশিরভাগই শেল সিমেন্টিক্স ব্যবহার করে না। - cjc
যে শুধুমাত্র execution প্রতি একবার টাইমস্ট্যাম্প যোগ করা হবে script.sh। OP প্রতি লাইন একটি টাইমস্ট্যাম্প প্রয়োজন। - Dave Forgac
যদিও এটি ওপি প্রশ্নের উত্তর দেয় না তবে আমি এখনও এটি দরকারী তথ্য খুঁজে পেয়েছি। - User


এটা চেষ্টা কর

timestamp()
{
 date +"%Y-%m-%d %T"
}

প্রতি echo কমান্ডে এই টাইমস্ট্যাম্প ফাংশনটি কল করুন:

echo "$(timestamp): write your log here" >> /var/log/<logfile>.log

3
2017-11-09 22:24



@ শাজবোট: সম্পাদনা করার জন্য ধন্যবাদ, এটি একটি টাইপ ত্রুটি ছিল, আমি লক্ষ্য করিনি। - Sanjay Yadav