আমি / দেব / নাল / কে কোনও ক্রোনজবকে সম্পূর্ণরূপে কীভাবে নিঃশব্দ করব?


72

আমার উবুন্টু-ডেস্কটপ এবং আমার ডিবিয়ান সার্ভারে আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা প্রতি মিনিটে কার্যকর করা দরকার (এমন একটি স্ক্রিপ্ট যা আমার স্পেস অনলাইন ব্রাউজারগেমের মিনিট-টিক বলে )।

সমস্যাটি হ'ল ডেবিয়ান ডেরিভেটস ক্রোন /var/log/syslogপ্রতিটি সময় এটি প্রয়োগ করে লগ ইন করে। বার বার বার বার চালিত বার্তাটি দেখে শেষ হয়েছিল /var/log/syslog:

Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1)

আমি জানি যে কোনও প্রোগ্রামের আউটপুট দমন করতে আমি এটিকে পুনর্নির্দেশ করতে পারি /dev/null, উদাহরণস্বরূপ কোনও প্রোগ্রাম থেকে সমস্ত ত্রুটি এবং সতর্কতা বার্তাগুলি গোপন করার জন্য আমি এই জাতীয় ক্রোনট্যাবে একটি লাইন তৈরি করতে পারি

* * * * *       root    /usr/local/sbin/mycommand.sh > /dev/null

তবে আমি একটি ক্রোনজব চালাতে চাই এবং নিশ্চিত হয়ে উঠব যে সমস্ত উত্পন্ন আউটপুট বা ত্রুটিগুলি নুলকে সরবরাহ করা হয়েছে, সুতরাং এটি সিসলগে কোনও বার্তা উত্পন্ন করে না এবং কোনও ইমেল তৈরি করে না


সম্পাদনা:
ক্রোন-লগগুলি এখানে পরিবর্তিত করে প্রস্তাবিত একটি পৃথক লগে পুনর্নির্দেশ করার সমাধান রয়েছে/etc/syslog.conf

তবে ত্রুটিটি হ'ল, তারপরে সমস্ত ক্রোনজবসের সমস্ত আউটপুট পুনঃনির্দেশিত।

আমি কি কোনওভাবে কেবল একটি একক ক্রোনজবকে পৃথক লগ ফাইলে পুনর্নির্দেশ করতে পারি? সাধারণত cron.hourlyফাইলের মধ্যেই কনফিগারযোগ্য ।


2
আপনি কেবল MAILTO=""ক্রোন ফাইলের শুরুতে রাখতে পারেন । এটি সমস্ত ইমেল দমন করবে। এবং আমি কখনও ক্রোন ডেমনের কথা শুনিনি যা সিসলগে চাকরির আউটপুট প্রেরণ করে (তবে আমি মনে করি এটি সম্ভব)।
প্যাট্রিক

@ পেট্রিক - এটি সবকিছু অক্ষম করে দেবে, যা ঠিক হতে পারে তবে সচেতন থাকুন। আমার আপডেটটি দেখুন, আপনি একাধিক ডাক্তার সেট করতে পারেন।
slm

হ্যাঁ, MAILTO=""ক্রোনটাবের প্রথম লাইনটি কোনও ইমেলকে আটকাবে। এছাড়াও, যদি আপনি সমস্ত আউটপুট দমন করে থাকেন তবে আপনার কমান্ড লাইনে পূর্ণ ত্রিফেক্টা ব্যবহার করুন .. সমস্ত 3 ধরণের এই স্ট্রিং দ্বারা পুনঃনির্দেশিত করা হয়: >/dev/null 2>&1 - অবশ্যই, আপনি স্ক্রিপটি একটি পৃথক লগতে পর্যায়ক্রমিক লেখাগুলি অন্তর্ভুক্ত করতে পারেন।
এসডসোলার

উত্তর:


119

লাইনটি এটি করুন:

* * * * *       root    /usr/local/sbin/mycommand.sh > /dev/null 2>&1

এটি STDOUT (1) এবং STDERR (2) উভয়কে ক্যাপচার করবে এবং এগুলিতে প্রেরণ করবে /dev/null

MAILTO

আপনি সেট করে এবং তারপরে পুনরায় সেট করে ইমেলটি অক্ষম করতে পারেন MAILTO=""যা কোনও ইমেল প্রেরণকে অক্ষম করবে।

উদাহরণ

MAILTO=""
* * * * *       root    /usr/local/sbin/mycommand.sh > /dev/null 2>&1

MAILTO="admin@somedom.com"
 * * * * *      root    /usr/local/sbin/myothercommand.sh

অতিরিক্ত বার্তা পাঠানো

প্রায়শই আপনি নিম্নলিখিত ধরণের বার্তা এতে পাবেন /var/log/syslog:

Nov 11 08:17:01 manny CRON[28381]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

এগুলি ক্রোনের মাধ্যমে কেবল বিজ্ঞপ্তিগুলি যে ক্রোনজবসের একটি ডিরেক্টরি কার্যকর করা হয়েছিল। এই কাজের সাথে এই বার্তাটির সরাসরি কোনও সম্পর্ক নেই, পরিবর্তে এটি crondসরাসরি ডেমন থেকে আসে from এগুলি সম্পর্কে আপনার করার মতো আসলে কিছুই নেই, এবং আমি আপনাকে এগুলি অক্ষম না করার জন্য উত্সাহিত করব, কারণ crondলগগুলি দিয়ে আপনি সম্ভবত একমাত্র উইন্ডোতে যেতে পারেন ।

যদি তারা আপনার কাছে খুব বিরক্ত হয় তবে আপনার কনফিগারেশন ফাইলের /var/log/syslogমাধ্যমে আপনার ফাইল থেকে বের করে আনতে আপনি সর্বদা তাদের বিকল্প লগ ফাইলের দিকে নির্দেশ করতে পারেন ।/etc/syslog.confsyslog


@ রুবো -? - আপনি একটি উদাহরণ দেখাতে পারেন? এইটি কী কাজ করছে না তা আমাকে দেখতে হবে। গুগলিং এটিকে উত্তর হিসাবে সরিয়ে নিয়েছে: সাইবারসিটি.বিজ
ফাফ

এটি সমস্ত আউটপুট এবং ইমেলের জন্য কাজ করে, তবে এটি এখনও / ভার / লগ /
সিস্লোগে

@ রুবো .77 - এটিই আমি ভেবেছিলাম আপনি সম্ভবত এটি সম্পর্কে জিজ্ঞাসা করছেন। আপনি এই বার্তাগুলি থামাতে পারবেন না, এগুলি নিজেই ক্রন্ড ডেমন দ্বারা তৈরি করা হয়।
slm

@ রুবো --77 - আমি পরিবর্তন সম্পর্কে সচেতন /etc/syslog.conf, আমি খুব কমই এটিকে বিকল্প হিসাবে বিবেচনা করব। এটি কেবলমাত্র সেই ফাইলটিকে পরিবর্তন করবে যা লগগুলিতে ডাম্প হয় বা আপনি ক্রোন বার্তাগুলি সমস্ত একসাথে সম্পূর্ণ অক্ষম করতে পারেন। আপনি যা চান তা করার কোনও উপায় নেই।
slm

1
@ রুবো - - - আপনি যা চান তা করতে সক্ষম হবার একমাত্র উপায় হ'ল আপনি যদি এই অনুরোধটির grep -v ...পরে কিছু রাখেন crond
slm

10

একটি স্ক্রিপ্ট রয়েছে যা প্রতি মিনিটে কার্যকর করা দরকার। সমস্যাটি হ'ল ক্রোন প্রতিটিবার এটি প্রয়োগ করলে / var / log / syslog এ লগ ইন করে। আমি বার্তাটি বার বার দেখেছি যা বারে বারে / ভার / লগ / সিস্লোগতে নির্গত হয়েছিল seeing

কি: আপনি কোন না এই বন্ধ করার জন্য মনে হয় যেহেতু, এটি জিজ্ঞাসা মূল্য ঠিক এই স্ক্রিপ্টের আর কোনটা ঠিক আপনি যে বার্তা syslog- র মধ্যে দেখতে চান?

যদি স্ল্যামের পরামর্শটি কাজ না করে, এটি কারণ হ'ল কিছু কিছু সরাসরি সিসলোগে লগইন করছে - হয় ক্রোন, যেমন মনে হয় আপনার কিছু মন্তব্যে বোঝানো হয়েছে, নতুবা ক্রোন দ্বারা চালিত প্রক্রিয়াটি। সিসলগে প্রেরিত বার্তা স্টিডিন বা স্ট্ডার থেকে আসে না, সুতরাং 2>&1&>সাহায্য করবে না।

অ্যাপ্লিকেশনটির আচরণটিকে প্রশ্নযুক্ত কনফিগার করার কোনও উপায় থাকতে পারে, তবে এটি কী তা আমরা জানি না।

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

আমার সাধারণ বক্তব্যটি হ'ল যদি আপনি বার্তা পুনঃনির্দেশ / ফিল্টার করতে না চান কারণ "এটি সমস্ত বার্তা পুনর্নির্দেশ করবে", আপনি ফিল্টারিং কৌশলটি পরিমার্জন করতে পারেন। আপনি যে সার্ভারের ত্রুটিযুক্ত থ্রেডটি যুক্ত করেছেন কেবল সেগুলি দ্বারা ফিল্টারিংয়ের উল্লেখ করেছে ( *.cron) - তবে আপনি এর চেয়ে আরও বিশেষায়িত ফিল্টার কনফিগার করতে পারেন


ডেবিয়ান এবং উবুন্টু উভয়েরই রাইস্লগ উপলব্ধ। ডিবিয়ান 5+ এ এটি ডিফল্ট সিস্টলগ, উবুন্টুতে এটি একটি বিকল্প, সুতরাং আপনাকে এটি ইনস্টল করতে হবে। এমন একটি ফিল্টার তৈরি করতে যা নির্দিষ্ট ধরণের সামগ্রীকে লক্ষ্য করে, এটিকে শীর্ষের (যেমন, অন্য কোনও নিয়মের আগে, তবে সাধারণ কনফিগারেশনের পরে, মডিউল লোডিং ইত্যাদির পরে) রাখুন /etc/rsyslog.conf। এটি করার সর্বোত্তম উপায় হ'ল rsyslog.confনিজে সম্পাদনা করা নয়, /etc/rsyslog.conf.d/ডিরেক্টরিতে একটি ফাইল তৈরি করা হবে যার নাম দুটি অঙ্ক দিয়ে শুরু হবে যা 50 এরও কম /etc/rsyslog.conf.d/15-my-filter.conf। আপনি সেখানে কিছু এখানে রাখতে পারেন:

:msg, contains, "/usr/bin/w3m -no-cookie" /dev/null

এটি বার্তাটি প্রেরণ করবে /dev/null(বা যদি আপনি চান তবে আলাদা লগ)। যাইহোক, বার্তাটি পরবর্তী নিয়মগুলির মাধ্যমে প্রেরণ করা হবে যা এটি প্রেরণ করে /var/log/syslog। এটি রোধ করতে:

& stop

তাত্ক্ষণিকভাবে অন্যান্য লাইন পরে। এটি পূর্ববর্তী নিয়মের সাথে মিলে এমন কোনও কিছু ফেলে দেয়। অথবা, একক-লাইন নিয়মের জন্য আপনি কেবলমাত্র stopসেই নিয়ম লাইনের শেষে যুক্ত করতে পারেন ।

rsyslogdকনফিগারেশন পরিবর্তন করার পরে আপনাকে পুনরায় চালু করতে হবে (যেমন সিস্টেমড সিস্টেমে systemctl restart rsyslog):

kill -HUP $(cat /var/run/rsyslogd.pid)

এইচইউপি ডেমনকে পুনরায় আরম্ভ করার কারণ করে।


আরএসস্লগের ~জন্য এখন অবহিত করা হয়েছে এবং এটি দ্বারা প্রতিস্থাপন করা উচিত stoprsyslogd.confফাইলের অবস্থানের বিষয়টিও গুরুত্বপূর্ণ। সুতরাং rsyslog জন্য আমি সহজভাবে ব্যবহার করতে হবে :msg, contains, "/usr/bin/w3m -no-cookie" stop। এবং তারপরে পুনরায় চালু করুন sudo systemctl restart rsyslog
ফ্র্যাঙ্ক ব্রেইটলিং

4

পরিবর্তন /etc/default/cron

# Or, to log standard messages, plus jobs with exit status != 0:
# EXTRA_OPTS='-L 5'
#
# For quick reference, the currently available log levels are:
#   0   no logging (errors are logged regardless)
#   1   log start of jobs
#   2   log end of jobs
#   4   log jobs with exit status != 0
#   8   log the process identifier of child process (in all logs)
#
EXTRA_OPTS="-L 0"

ডিফল্টরূপে EXTRA_OPTSলাইন হয়""


2

/dev/nullকমান্ড থেকে আউটপুট আড়াল করে পুনঃনির্দেশ । আপনি যদি এটি না করেন তবে ক্রোন আপনাকে আউটপুটটি মেল করে। কমান্ড থেকে আউটপুট কখনই সিস্টেম লগগুলিতে শেষ হয় না (কমপক্ষে ক্রোন দ্বারা না করে)।

সাধারণত আউটপুটটিকে পুনঃনির্দেশ করা খারাপ ধারণা /dev/null, বিশেষত ত্রুটি আউটপুট: যদি কিছু ভুল হয়ে যায় তবে সমস্যাটি সনাক্ত করার জন্য আপনার কাছে কোনও তথ্য থাকবে না। আপনি যদি কোনও মেল পেতে না চান তবে লগ ফাইলে পুনর্নির্দেশ করুন।

এর কোনওটিই আপনার সমস্যার সাথে প্রাসঙ্গিক নয়। আপনি যে বার্তাটি উদ্ধৃত করেছেন তা ক্রোন থেকেই। ক্রোন প্রতিবার কাজ চালানোর সময় একটি লগ এন্ট্রি লেখেন। আমি দেখেছি এমন কোনও ক্রোন বাস্তবায়ন আপনাকে বিভিন্ন কাজের জন্য বিভিন্ন লগিং কনফিগারেশন ব্যবহার করতে দেয়।

আপনি যদি কিছু কাজ বাদ দিতে চান তবে আপনার একমাত্র বিকল্পটি হ'ল সিসলোগ ডেমনটিতে লগ বার্তাগুলিতে পাঠ্য ফিল্টারিং প্রয়োগ করা। সিসলগ ফিল্টারিংয়ের জন্য ডি-ফ্যাক্টো স্ট্যান্ডার্ডটি সিএসলগ ডেমন হিসাবে আরএসস্লগ (যা আপনার সিস্টেমে ডিফল্ট হতে পারে বা নাও হতে পারে) চালানো হয়। এই নির্দিষ্ট কমান্ডটি কীভাবে ফিল্টার করা যায় তার জন্য সোনারলকসের উত্তর দেখুন ।

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