লিনাক্স init.d / rc.d স্ক্রিপ্ট থেকে ত্রুটি বার্তা কীভাবে পাওয়া যায়?


28

লিনাক্সে, আমি বুট চলাকালীন কার্যকর করার জন্য কিছু স্ক্রিপ্ট লিখেছি এবং সেগুলি ইনস্টল করার বিভিন্ন উপায়ে চালিয়েছি। বড় স্ক্রিপ্টগুলির জন্য আমি /etc/init.dযথাযথ /etc/rc.d/rc?.dরানলেভেলগুলি যুক্ত করব এবং লিঙ্ক করব । ছোট স্ক্রিপ্টগুলির জন্য, আমি এতে যুক্ত হব /etc/rc.d/rc.local। এই প্রক্রিয়াটি সুচারুভাবে চলমান বলে মনে হচ্ছে।

এখন আমি আমার স্ক্রিপ্টগুলির একটি টুইট করেছি এবং এটি ব্যর্থ হচ্ছে। আমি এটি নির্ণয়ের সময় হ্যাক করছি কারণ আমি ত্রুটি আউটপুট ক্যাপচার বলে মনে করতে পারি না। আমি /var/log/messagesবাকী অংশটি পরীক্ষা করে দেখেছি এবং /var/logব্যবহারের কিছু খুঁজে পাচ্ছি না।

কেউ কি জানে:

  1. এই ত্রুটি বার্তা স্বয়ংক্রিয়ভাবে কোথাও ক্যাপচার করা হয়?
  2. যদি তা না হয় তবে আমি কীভাবে আমার init.d স্ক্রিপ্টগুলি থেকে স্টডআউট / স্টডারার ক্যাপচার করব?

আগাম ধন্যবাদ.



আপনি যদি সিস্টেমডের সাথে আরও আধুনিক বিতরণে যান তবে এটি আপনার পক্ষে এটি পরিচালনা করবে এবং প্রতিটি পরিষেবার লগ বার্তাগুলিকে জার্নাল করার অনুমতি দেবে।

উত্তর:


17
  1. না - তারা যেতে stdout- এ (যদি আপনি ব্যবহার echo) অথবা stderr (যদি আপনি ব্যবহার echo >&2)।

  2. আপনার স্ক্রিপ্টগুলিতে লগগুলিতে এবং / অথবা সিসলগকে তাদের নিজস্ব লিখতে হবে (আপনার বিতরণে কিছু init.d ফাংশন থাকতে পারে যা সেখানে সহায়তা করতে পারে - আপনার প্রশ্নে আপনার বিতরণ যুক্ত করতে পারে)।

লগের জন্য গেলে teeকমান্ডটি সন্ধান করুন। সিসলগের জন্য গেলে দেখুন logger। আপনি যেভাবে চান সেগুলিতে এগুলি একত্রিত করতে পারেন।



6

আপনি স্ক্রিন এবং সিসলগ উভয়ই বার্তা প্রতিধ্বনি করতে একটি ফাংশন তৈরি করতে পারেন, এরকম কিছু:

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

আপনি এটি একটি পৃথক ফাইলে রাখতে পারেন এবং এটির সাথে আপনার স্ক্রিপ্টগুলিতে অন্তর্ভুক্ত করতে পারেন

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho

ধন্যবাদ, আমি যা খুঁজছিলাম তার কাছাকাছি এটি। আমি / ওকে কীভাবে পুনঃনির্দেশ করতে হবে তা জানি তবে লগারে কীভাবে ডাকতে হবে তা আমি জানতাম না।
ম্যাককেমে

কি [ -r ... ]যদি উপস্থিত থাকে চেক করতে একটি পরীক্ষা?
ম্যাককেমে

হ্যাঁ, ফাইলটি পাঠযোগ্য কিনা তা পরীক্ষা করে দেখুন।
ott--

5

থ্রি স্ক্রিপ্ট থেকে প্রাপ্ত বার্তাগুলি সাধারণত কোথাও ক্যাপচার করা হয় না। সুতরাং, এটি নিজে করার একটি উপায় আপনার নিজের মধ্যে প্রয়োগ করতে হবে। loggerসিসলগে সমস্ত আউটপুট প্রেরণ করার জন্য একটি ভাল ধারণা । এই উদাহরণটি syslog এ stdout এবং stderr প্রেরণ করবে:

exec 1> >(logger -s -t $(basename $0)) 2>&1

আমি এই দুর্দান্ত নিবন্ধে এটি পেয়েছি: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/

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