ফাইলটিতে ক্রন্টাবের সমস্ত স্টডার আউটপুট লগইন করা হচ্ছে


12

উদাহরণস্বরূপ, আমি stderrএইভাবে একটি স্ক্রিপ্ট লগ করতে পারি :

* * * * * run_script.sh > /var/log.txt 2>&1

তবে আমি stderrআমার ক্রন্টবায় সমস্ত স্ক্রিপ্ট লগ করতে চাই । আমি > /var/log.txt 2>&1সমস্ত স্ক্রিপ্টগুলিতে সংযোজন করতে পারি , তবে আমার শত শত স্ক্রিপ্ট থাকলে তা ভাল হয় না cron। এটি করার আরও কি সহজ উপায় আছে?

উত্তর:


6

ক্রোনট্যাবে, আপনি মেল্টো সেট করতে পারেন কোনও স্ক্রিপ্ট চালানো মেল ওরফেতে নির্দেশ করতে। এই স্ক্রিপ্টটি কোনও মেল বার্তা গ্রহণ করবে, শিরোনামগুলি এবং অন্যান্য গোপগুলি কেটে ফেলবে এবং বাকী অংশটিকে লগার দিয়ে লগ করবে। যেহেতু সমস্ত ক্রোন স্ক্রিপ্ট আউটপুট মেল্টোর দ্বারা নির্দিষ্ট ঠিকানায় প্রেরণ করা হয়েছে, আপনি সমস্ত কিছু ক্যাপচার করবেন।

উদাহরণ: ক্রোনটবে

MAILTO=myalias

/ ইত্যাদি / মেল / উপাধিতে (ধরে নিবেন আপনি সেন্ডমেল ব্যবহার করছেন)

myalias:"|/usr/local/bin/my-processing-script.sh"

এবং স্ক্রিপ্টটি মেল শিরোনামগুলি বন্ধ করে দেবে এবং ক্রোন আউটপুট প্রক্রিয়া করবে।


আপনি কি মাইলটো, ওরফে, এমটিএ, স্ক্রিপ্ট ইত্যাদির বিষয়ে আরও নির্দিষ্ট করতে পারেন?
এন্ডোলিথ

1
@ এন্ডোলিথ আমি একটি প্রাথমিক সেটআপ দেওয়ার উত্তরটি সম্পাদনা করেছি যা প্রেরণমেল এবং বিস্তৃতভাবে সামঞ্জস্যপূর্ণ এমটিএগুলির জন্য কাজ করা উচিত। আপনাকে নিজে স্ক্রিপ্টটি লিখতে হবে।
কাইল জোন্স

5

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

যেহেতু এটি স্থানীয় মেল ব্যবহার করে, আপনার সত্যিই কিছু সেট আপ করার দরকার নেই, বা মেইলএক্সটি ইতিমধ্যে এখানে না থাকলে ইনস্টল করতে হবে। ক্রোন আপনাকে আউটপুট প্রেরণ করবে, আপনি কোনও ফাইলে মেলটি সংরক্ষণ করতে পারেন এবং সেখান থেকে অনেক কিছুই করতে পারেন। ক্রোন আপনার প্রয়োজন অনুসারে সরাসরি কাজ করার উপায়টি পরিবর্তন করার চেষ্টা করার উপায় নয়। যদি আপনি এটি না ভাবেন তবে কেবল প্যাচ করুন এবং ক্রোনটি পুনরায় বিল করুন, এটিকে আমার_ ক্রোন বলুন এবং ক্রোনের পরিবর্তে এটি ব্যবহার করুন। এবং অবশেষে আপনার আমার_ ক্রোনটি আপ টু ডেট রাখার জন্য প্রস্তুত থাকুন এবং প্রায়শই এটি পুনরায় তৈরি করতে প্রস্তুত হন।

আপনার সমস্ত স্ক্রিপ্টগুলির শুরুতে এটি যুক্ত করুন যাতে সমস্ত কিছু লগ হয় এবং প্রথম ত্রুটি বন্ধ হয়

exec 2>&1 > /var/log/YOUR_LOG_FILE
set -e

পুনর্নির্দেশের আদেশটি বিপরীত হওয়া উচিত? > /var/log/YOUR_LOG_FILE 2>&1উদাহরণস্বরূপ, প্রথমে stdout কোনও ফাইলে পুনঃনির্দেশ করুন এবং তারপরে stderr কে stdout এ পুনঃনির্দেশ করুন (যা এখন ফাইলের দিকে নির্দেশ করে)।
jfs

এটি অত্যন্ত ক্রেজি যে ন্যূনতম সার্ভারে আপনার কোনও মেল পরিষেবা এবং সম্ভবত কোনও মেল ক্লায়েন্ট ইনস্টল করতে হবে, কেবল ক্রোন দ্বারা উত্পাদিত ত্রুটিগুলি পড়তে হবে। এটি একটি নৈরাজ্যবাদী নকশার সিদ্ধান্ত মত মনে হয়।
জেমস ম্যাকমাহন

0

Https://stackoverflow.com/a/7145618/20774 এ রায়ান ইয়ে এর স্ক্রিপ্ট এটির জন্যও দরকারী, যদিও এটি স্টডআউট এবং স্টাডার উভয়ই করে।


এটি করার জন্য আমার কাছে একটি ছোট স্ক্রিপ্ট ক্রোনলগ রয়েছে have স্ক্রিপ্ট কোড

#!/bin/sh
echo "[`date`] Start executing $1"
$@ 2>&1 | sed -e "s/\(.*\)/[`date`] \1/"
echo "[`date`] End executing $1"

তাহলে আপনি করতে পারেন

cronlog.sh /opt/scripts/sql_fetch >> your_log_file

উদাহরণ ফলাফল

cronlog.sh echo 'hello world!'

[Mon Aug 22 04:46:03 CDT 2011] Start executing echo
[Mon Aug 22 04:46:03 CDT 2011] helloworld!
[Mon Aug 22 04:46:03 CDT 2011] End executing echo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.