আমি টাইমস্ট্যাম্প সহ আমার সেন্টোস 5.x ডেমেসগটি পড়তে চাই, আমি এটি কীভাবে করব?
dmesg -T
আমি টাইমস্ট্যাম্প সহ আমার সেন্টোস 5.x ডেমেসগটি পড়তে চাই, আমি এটি কীভাবে করব?
dmesg -T
উত্তর:
dmesg
কার্নেল লগ রিং বাফার পড়ে। এটি টাইমস্ট্যাম্পগুলি করে না। আপনার যা করা উচিত তা হ'ল বাফার থেকে কার্নেল লগগুলি ধরতে এবং একটি ফাইলে প্রেরণ করার জন্য সিসলগ কনফিগার করা (যদি এটি ইতিমধ্যে এটি সেট না করে থাকে)। দ্রষ্টব্য, ডিফল্ট CentOS 5.x syslog কনফিগারেশন কার্নেল লগগুলিকে /var/log/messages
আমার স্মরণ হিসাবে পাঠায় ।
আপনি যদি /var/log/kern.log
ডিফল্ট সিসলোগ ডেমন ব্যবহার করে সমস্ত কার্নেল (dmesg) লগগুলিতে প্রেরণ করতে চান তবে আপনি নীচের মতো একটি লাইন যুক্ত করতে চান/etc/syslog.conf
kern.* /var/log/kern.log
/etc/rsyslog.conf
সমাধান রয়েছে "dmesg / কার্নেল রিং বাফারের জন্য টাইমস্ট্যাম্পগুলি সক্ষম করা"
আপনি যোগ করতে পারেন:
printk.time=1
কার্নেল সেমিডলাইন।
আমার হিসাবে, আমি পুতুলের সাথে সমস্ত মেশিনে rc.local যুক্ত করেছি। এটি আমার পক্ষে সহজ):
if test -f /sys/module/printk/parameters/time; then
echo 1 > /sys/module/printk/parameters/time
fi
rc.local
করা এটির জন্য সত্যই এক ধরনের কদর্য সমাধান ( rc.local
ব্যবহারটি প্রায়শই যে কোনও কিছুর কুশল সমাধান)। একটি ভাল সমাধান হ'ল একটি ফাইল printk.time = 1
intoোকানো /etc/sysctl.conf
বা inোকানো /etc/sysctl.d/
। এই কারণেই এই ফাইলগুলি বিদ্যমান। স্টাফ ক্র্যামিং rc.local
শেষ পর্যন্ত আপনাকে একটি ভঙ্গুর, বিশৃঙ্খল, অগোছালো, অবিশ্বাস্য প্রারম্ভকালে ছেড়ে যায়।
আমি এই সহজ স্ক্রিপ্ট লিখেছি। হ্যাঁ, এটি ধীর। আপনি যদি দ্রুত কিছু চান তবে আপনি আসলে পার্ল, পাইথন বা অন্য কিছুতে একটি স্ক্রিপ্ট লিখবেন write আমি নিশ্চিত যে এই সাধারণ স্ক্রিপ্টটি এটি কীভাবে গণনা করা যায় তার ঝুলন্ত স্থান দিতে পারে।
দয়া করে নোট করুন আমি প্রতিটি লাইনে নিবন্ধিত সেকেন্ডের ভগ্নাংশটিকে উপেক্ষা করেছি (টাইমস্ট্যাম্পের পরে।)
#!/bin/bash
localtime() {
perl -e "print(localtime($1).\"\n\");";
}
upnow="$(cut -f1 -d"." /proc/uptime)"
upmmt="$(( $(date +%s) - ${upnow} ))"
dmesg | while read line; do
timestamp="$(echo "${line}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")"
timestamp=$(( ${timestamp} + ${upmmt} ))
echo "${line}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
done
আমি আসা করি এটা সাহায্য করবে. :)
ক্ষেত্রে স্ক্রিপ্ট পরিবর্তন "" "দিয়ে শুরু হয় না
#!/bin/bash
localtime() {
perl -e "print(localtime($1).\"\n\");";
}
upnow=$(cut -f1 -d"." /proc/uptime)
upmmt=$(( $(date +%s) - ${upnow} ))
dmesg \
| while read LINE; do
if [ "$(echo ${LINE} | egrep -v "^\[")" == "" ] ; then
timestamp=$(echo "${LINE}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")
timestamp=$(( ${timestamp} + ${upmmt} ))
echo "${LINE}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
else
echo "${LINE}"
fi
done
টাইমস্ট্যাম্প থেকে নেতৃস্থানীয় স্পেসগুলি সরিয়ে এটি প্লুটোইডের পরামর্শের উপর আপডেট।
dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/( *)(\d+)\.\d+/localtime($2 + $a)/e; print $_;'
নীচে হিসাবে একটি সামান্য পার্ল স্ক্রিপ্ট। এটি একটি সাধারণ উপায়, এবং আমি লেখক নই।
dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/(\d+)\.\d+/localtime($1 + $a)/e; print $_;'
perl -n
মানক ইনপুট পড়ার এবং পরিবর্তনশীল able _ এ পড়ার একটি উপায়।s/...
ডেমসগের সূচনা - কমান্ডটি $ _ এ মান গ্রহণ করে এবং ###### ) সিস্টেম শুরুর সময় ($ ক) এ যুক্ত হয়েছে। - print $a
"বুট থেকে সেকেন্ড" সময় স্ট্যাম্পের পরিবর্তে স্থানীয় বন্ধুত্বপূর্ণ টাইম স্ট্যাম্পের সাহায্যে ডেমসাগ মুদ্রণ করে।