ক্রোন জবস কিভাবে লগ করবেন?


218

আমি জানতে চাই যে আমি প্রতিটি মৃত্যুদন্ড কার্যকর করতে ক্রোন জবগুলি ঠিক কী করছে তা দেখতে পাচ্ছি। লগ ফাইলগুলি কোথায় অবস্থিত? অথবা আমি আমার ইমেলটিতে আউটপুটটি পাঠাতে পারি? ক্রোন কাজ চলাকালীন লগটি প্রেরণের জন্য আমি ইমেল ঠিকানাটি সেট করে রেখেছি তবে আমি এখনও কিছু পাইনি।


উত্তর:


347
* * * * * myjob.sh >> /var/log/myjob.log 2>&1

ক্রোন জব থেকে সমস্ত আউটপুট /var/log/myjob.log এ লগ করবে

আপনি mailইমেল প্রেরণ করতে ব্যবহার করতে পারেন । বেশিরভাগ সিস্টেমে cronরুট বা সংশ্লিষ্ট ব্যবহারকারীর ইমেল দ্বারা আনহ্যান্ডেল চাকরির আউটপুট প্রেরণ করবে ।


78
মানে কি বর্ণনা 2>&1: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21
Yamaneko

5
এই লগফিলটি কখনই তৈরি না হলে সমস্যা কী হতে পারে?
ক্ল্যাম্প করুন

10
FWIW, আপনি উভয় চান stderrএবং stdoutলগ ইন, 2>&1: অপ্রত্যক্ষ্যতার পরে আসা হয়েছেmyjob.sh >> /var/log/myjob.log 2>&1
ড্যান Lecocq

2
YYYY-MM-DD_hh-mm-secআউটপুট ফাইলের নাম কীভাবে sertোকানো যায়, যাতে প্রতিটি ফাইলের নাম আলাদা হয় এবং পুনরায় লেখা ছাড়াই রাখা হয়?
দানিজেল

6
@ ডানিজেল সার্ভারফলট.এ / ১১৩৩73৫/১৯৩7777 0 0 * * * date +\%Y\%m\%d\%H\%M\%S/some/path/to/a/file.php> OME হোম / ক্রোন.লগ 2> & 1
অ্যানি দ্য অ্যাজিলে

61

ডিফল্ট ক্রোন লগ করে / var / log / syslog এ প্রবেশ করুন যাতে আপনি ক্রোন সম্পর্কিত এন্ট্রিগুলি ব্যবহার করে দেখতে পারেন:

grep CRON /var/log/syslog

/ubuntu/56683/where-is-the-cron-crontab-log


2
উবুন্টু 12.04-এ, ডিফল্ট .log ছাড়া, অর্থাত্ / var / লগ /
সিসলগ

5
journalctl | grep cronসিস্টেমেড সিস্টেমগুলিতে ব্যবহার করুন
মাইক্রোসফ্ট লিনাক্স টিএম

2
/var/log/cronএডাব্লুএস লিনাক্স এএমআইতে।
জোনাথন

2
বাsudo journalctl -u cron
Gianfranco পি।

2
ঠিক যেখানে cronলগ করা হচ্ছে এটি খুব সিস্টেম-নির্ভর। লিনাক্স সিস্টেমে বিভিন্ন লগিং গন্তব্য কীভাবে কনফিগার করা হয় (বা আরও সঠিকভাবে, যে সিস্টেমগুলি ব্যবহার করে syslog) সে সম্পর্কে বিশদ সহ পৃথক উত্তর রয়েছে । অন্যান্য সিস্টেমে এই জিনিসগুলি কনফিগার করার আলাদা উপায় থাকতে পারে।
ট্রিপলি

10

আমার কোডটি এখানে:

* * * * * your_script_fullpath >> your_log_path 2>&1

">>" এর অর্থ ফাইলরাইটে ডেটা সংযুক্ত করা? "2> & 1" এর অর্থ কী, ত্রুটিযুক্ত পুরো আউটপুট, তাই না?
নালপয়েন্টার

3
বুনিয়াদি পুনঃনির্দেশ প্রশ্নগুলি ম্যানুয়ালটিতে সেরা পরীক্ষা করা হয়। স্ট্যাক ওভারফ্লোতে এই অপারেটরগুলি সম্পর্কে নকল প্রশ্নগুলির একটি মেট্রিক পাত্রজেবিও রয়েছে। তবে হ্যাঁ, মোটামুটিভাবে; >>সংযোজন করে এবং 2>&1স্ট্যান্ডার্ড আউটপুট হিসাবে একই স্থানে স্ট্যান্ডার্ড ত্রুটি পাঠাতে বলে।
ট্রিপলি

10

কমপক্ষে তিনটি বিভিন্ন ধরণের লগিং রয়েছে:

  1. প্রোগ্রামটি পূর্বে লগিং সম্পাদন করা হয়, যা কেবলমাত্র কমান্ড প্রয়োগ করতে ক্রোনজব চেষ্টা করলে লগ হয়। ইতিমধ্যে @ ম্যাথহে লক দ্বারা উল্লিখিত হিসাবে এটি একটি / ভার / লগ / সিসলগে অবস্থিত।

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

     * * * *  COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
    
    • আমি / ABSOLUTE_PATH_TO_LOG এর অনুমতিগুলি পরীক্ষা করে বিবেচনা করব এবং সেই ব্যবহারকারীর অনুমতি থেকে কমান্ডটি চালাব। কেবল যাচাইকরণের জন্য, আপনি পরীক্ষা করার সময় এটি সমস্যার সম্ভাব্য উত্স হতে পারে কিনা তা পরীক্ষা করে দেখুন।
  3. প্রোগ্রামটির নিজস্ব ত্রুটি-পরিচালনা ও ট্র্যাকিংয়ের জন্য লগিং সহ নিজেই লগিং।

ক্রোনজবসগুলির সাথে সমস্যাগুলির কয়েকটি সাধারণ উত্স রয়েছে: * বাইনারিটির কার্যকর প্যাথটি কার্যকর করা উচিত UT আপনি যখন এটি আপনার শেল থেকে চালান, এটি কাজ করতে পারে তবে ক্রোন প্রক্রিয়াটি অন্য পরিবেশ ব্যবহার করে বলে মনে হয় এবং তাই আপনি যদি সর্ব্বোপথ ব্যবহার না করেন তবে এটি সর্বদা বাইনারি খুঁজে পায় না। * বাইনারি দ্বারা ব্যবহৃত লাইব্রেরি। এটি পূর্ববর্তী পয়েন্টটি কমবেশি, তবে নিশ্চিত হয়ে নিন যে, কমান্ডের নামটি সহজভাবে লিখলে ঠিক একই বাইনারিটি উল্লেখ করা হয় যা খুব একই লাইব্রেরি ব্যবহার করে, বা আরও ভাল, আপনি যে বাইনারিটিকে পরম পথের সাথে উল্লেখ করছেন তা পরীক্ষা করে দেখুন আপনি সরাসরি কনসোলটি ব্যবহার করার সময় আপনি একই বিষয়টি উল্লেখ করেন। বাইনারিগুলি সনাক্তকরণ কমান্ড ব্যবহার করে পাওয়া যাবে, উদাহরণস্বরূপ:

$locate python

নিশ্চিত হয়ে নিন যে আপনি যে বাইনারিটি উল্লেখ করবেন, সেই একই বাইনারিটি আপনি নিজের শেলটিতে কল করছেন, বা ক্রোনজব্বার মধ্যে রাখার পরিকল্পনা করা নিখুঁত পথটি ব্যবহার করে কেবল আপনার শেলের মধ্যে আবার পরীক্ষা করুন।

  • সমস্যার আরেকটি সাধারণ উত্স হ'ল ক্রাউনজ্বমের সিনট্যাক্স। মনে রাখবেন যে তালিকার জন্য (কমা), রেঞ্জগুলি নির্ধারণ করতে (ড্যাশগুলি -), ব্যাপ্তি (স্ল্যাশ) ইত্যাদির সংজ্ঞা নির্ধারণ করতে, ইত্যাদির জন্য বিশেষ অক্ষর রয়েছে। একবার দেখুন: http://www.softpanorama.org/ ইউটিলিটিস / cron.shtml

8

উবুন্টুতে আপনি cron.logকেবলমাত্র CRON এন্ট্রি ধারণ করতে একটি ফাইল সক্ষম করতে পারেন ।

লাইন যে উল্লেখ Uncomment cronমধ্যে /etc/rsyslog.d/50-default.confফাইল:

#  Default rules for rsyslog.
#

#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                          /var/log/cron.log

ফাইলটি সংরক্ষণ করুন এবং বন্ধ করুন এবং তারপরে rsyslogপরিষেবাটি পুনরায় চালু করুন :

sudo systemctl restart rsyslog

আপনি এখন তার নিজস্ব ফাইলে ক্রোন লগ এন্ট্রি দেখতে পাবেন:

sudo tail -f /var/log/cron.log

নমুনা আউটপুট:

Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

তবে, স্ক্রিপ্টগুলি প্রকৃতপক্ষে ভিতরে চালিত হয়েছিল /etc/cron.dailyবা /etc/cron.hourlyসেগুলি সম্পর্কে আরও তথ্য আপনি দেখতে পাবেন না যতক্ষণ না sc স্ক্রিপ্টগুলি ক্রোন.লগে সরাসরি আউটপুট দেয় (বা সম্ভবত অন্য কোনও লগ ফাইলে)।

যদি আপনি যাচাই করতে চান যে কোনও ক্রন্টাব চলছে কিনা এবং এটিতে সন্ধান করতে হবে না cron.logবা syslog, একটি ক্রন্টব তৈরি করুন যা আপনার পছন্দের লগ ফাইলে আউটপুট পুনঃনির্দেশ করে - এরকম কিছু:

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1

থেকে নেওয়া পদক্ষেপগুলি: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/


উবুন্টু 16.04 কোনও ক্রোন লগ প্রদর্শন করেনি এবং এই তথ্যটি কৌশলটি করেছে।
pojda

5

cron ক্রোন কাজের মালিকের কাছে এটি মেইলে চালিত প্রতিটি কাজের স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি ইতিমধ্যে প্রেরণ করে।

আপনি ব্যবহার করতে পারেন MAILTO=recipientমধ্যে crontabফাইল একটি আলাদা অ্যাকাউন্ট এ পাঠানো ইমেল আছে।

এটি কাজ করার জন্য আপনার সঠিকভাবে মেল কাজ করা দরকার। স্থানীয় মেলবক্সে বিতরণ করা সাধারণত সমস্যা হয় না (বাস্তবে সম্ভাবনা থাকেls -l "$MAIL" প্রকাশিত হবে যে আপনি ইতিমধ্যে কিছু পেয়েছেন) তবে এটি বক্স থেকে এবং ইন্টারনেটে বের করার জন্য এমটিএ প্রয়োজন (পোস্টফিক্স, সেন্ডমেল, আপনার কী আছে) বিশ্বের সাথে সংযোগ রাখতে সঠিকভাবে কনফিগার করা হবে।

যদি কোনও আউটপুট না থাকে তবে কোনও ইমেল তৈরি করা হবে না।

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

উভয় আউটপুট স্ট্রিমগুলিকে পুনর্নির্দেশ করতে সিনট্যাক্সটি হ'ল

42 17 * * * script >>stdout.log 2>>stderr.log

লক্ষ্য করুন যে কীভাবে আমরা >>ওভাররাইটের পরিবর্তে (দ্বিগুণ ) সংযোজন করব , যাতে কোনও আগের কাজের আউটপুট পরবর্তী ব্যক্তির দ্বারা প্রতিস্থাপন না হয়।

এখানে অনেক উত্তরে প্রস্তাবিত হিসাবে, আপনি উভয় আউটপুট স্ট্রিমগুলি একটি ফাইলে প্রেরণ করতে পারেন; 2>&1"স্ট্যান্ডার্ড আউটপুট যেখানেই চলছে সেখানে স্ট্যান্ডার্ড ত্রুটি হওয়া উচিত" বলার সাথে দ্বিতীয় পুনর্নির্দেশটি প্রতিস্থাপন করুন । (তবে আমি বিশেষত এই অনুশীলনটিকে সমর্থন করি না mainly এটি মূলত বোধগম্য হয় যদি আপনি সত্যিকার অর্থে স্ট্যান্ডার্ড আউটপুটটিতে কিছু প্রত্যাশা না করেন তবে কিছু উপেক্ষা করতে পারেন, সম্ভবত আপনার স্ক্রিপ্ট থেকে ডাকা কোনও বাহ্যিক সরঞ্জাম থেকে এসেছেন))

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

একটি সাধারণ অ্যান্টিপ্যাটার্ন হ'ল সবকিছুতে পুনর্নির্দেশ করা /dev/null (এবং তারপরে স্ট্যাক ওভারফ্লোকে জিজ্ঞাসা করুন যে কোনও কিছু যখন কাজ করছে না তখন কী কী ভুল হয়েছে তা নির্ধারণ করতে; তবে আমরা হারিয়ে যাওয়া আউটপুটও দেখতে পাই না!)

আপনার স্ক্রিপ্টের মধ্যে থেকে নিয়মিত আউটপুট (প্রকৃত ফলাফল, আদর্শভাবে মেশিন-পঠনযোগ্য আকারে) এবং ডায়াগনস্টিকস (সাধারণত কোনও মানব পাঠকের জন্য ফর্ম্যাট করা) আলাদা রাখার বিষয়টি নিশ্চিত করুন। শেল স্ক্রিপ্টে,

echo "$results"  # regular results go to stdout
echo "$0: something went wrong" >&2

কিছু প্ল্যাটফর্ম (এবং উদাহরণস্বরূপ GNU Awk) আপনাকে /dev/stderrত্রুটি বার্তাগুলির জন্য ফাইলের নাম ব্যবহার করার অনুমতি দেয় , তবে এটি সঠিকভাবে বহনযোগ্য নয়; পার্লে, warnএবং dieস্ট্যান্ডার্ড ত্রুটিতে মুদ্রণ করুন; পাইথনে, লিখুন sys.stderrবা ব্যবহার করুন logging; রুবি এ, চেষ্টা $stderr.puts। ত্রুটি বার্তাগুলিতে কীভাবে স্ক্রিপ্টটির নাম অন্তর্ভুক্ত করা উচিত যা ডায়াগনস্টিক বার্তা দেয় Notice


1

আপনি সুডোর সাথে কিছু কমান্ড চালিয়ে যাচ্ছেন, এটি এটির অনুমতি দেয় না। সুডোর একটি টাই দরকার needs


4
এটি sudoকনফিগারেশনের উপরও নির্ভর করে । পাসওয়ার্ড সরবরাহ করার উপায় ছাড়াই যে জিনিসগুলি চালানো দরকার সেগুলি NOPASSWD:আপনার sudoersকনফিগারেশনে কনফিগার করা উচিত ।
ট্রিপলি

0

আপনি যদি এখনও আপনার ক্রোন জব পরীক্ষা করতে চান তবে সিপ্যানেলে ক্রোন জব সেট করার সময় আপনার একটি বৈধ ইমেল অ্যাকাউন্ট সরবরাহ করা উচিত।

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

দয়া করে মনে রাখবেন যে আপনি প্রতিটি সম্পাদিত ক্রোন কাজের জন্য একটি ইমেল পাবেন। যদি আপনার ক্রোনগুলি প্রায়শই চালিত হয় তবে এটি আপনার ইনবক্সে প্লাবিত হতে পারে

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