আমি কীভাবে কোনও ফাইলের মধ্যে টাস্ক আউটপুট লগ করব?


10

আমার একটি উত্তরীয় কাজ ব্যবহার করে একটি ওরাকল ডাটাবেস আমদানি করে impdp

এটি কনসোলে প্রচুর আউটপুট উত্পন্ন করে তাই আমি সেট করেছি no_log: True

যাইহোক, এই ব্যর্থ হলে আমি লগ দেখতে চাই!

আমি কীভাবে এই নির্দিষ্ট কাজটি কোনও কনসোলে একটি ফাইলের জন্য লগ করতে পারি?


আপনি কমান্ড মডিউল ব্যবহার করছেন?
জিওনগ চিয়ামিভ

একটি ধারণা [আরও একটি হ্যাক] হ'ল কিছু বাহ্যিক ফাইলে লগগুলি লিখতে হবে, এবং তারপরে কোনও টাস্ক থাকবে যা failed_whenশর্তটি ব্যবহার করে এবং পূর্ববর্তী হলে লগ ফাইলটি সরিয়ে ফেলবে। কার্য সফল ছিল :)
ডওয়ানি 33

সফল রান চলাকালীন কেন আপনি কনসোল আউটপুটটি দেখতে পাচ্ছেন? আমি কোনও সফল টাস্ক এক্সিকিউশন চলাকালীন স্টাডাউট প্রদর্শন সম্ভব বলে মনে করি নি, বা এটিও সম্ভব বলে মনে করি না, এটি ঠিক সামনে আসা উচিত [ঠিক আছে: হোস্টের নাম]। তবে কোনও ত্রুটি শনাক্ত হওয়ার পরে আউটপুটটি উত্তরযোগ্য নিয়ন্ত্রণ কনসোলে ফেলে দেওয়া হয় (এবং কোনও উত্তরযোগ্য লগ সংজ্ঞায়িত) আপনি কি কনফিগারেশনটি ভাগ করে নিতে আপত্তি করবেন যা নিয়মিত সফল রান করার সময় আপনাকে বড় স্টাডাউট দেয়?
hvindin

ভার্জোজ লগ পাওয়ার জন্য কমান্ডটি -vvvপরে hvindin রাখুন ansible-playbook
দাওয়ানি 33

1
কোনও ভেরিয়েবলের নিবন্ধন করা সর্বোত্তম যৌক্তিক পদক্ষেপ বলে মনে হয়, জবাবদিহি ট্রিগারযুক্ত কমান্ডগুলি থেকে আউটপুটগুলি কী করতে হবে সে সম্পর্কে আমার মতামতের জন্য আপনার উত্তর সম্পর্কে আমার মন্তব্য দেখুন।
hvindin

উত্তর:


4

[আমার মন্তব্যে উত্তরে রূপান্তর করা]

এটি করার একটি উপায় হ'ল কিছু বাহ্যিক ফাইলে লগগুলি লিখতে এবং তারপরে একটি টাস্ক থাকা যা ব্যর্থ_আর শর্তটি ব্যবহার করে এবং লগ ফাইলটি সরিয়ে দেয়, যদি পূর্ববর্তী কাজটি সফল হয়।

এর মতো কিছুতে আপনাকে সহায়তা করা উচিত।

 - name: Run Py script
      command: <>.py  > <>.log
      become: yes
      register: PyScript
      ignore_errors: True

    - name: PyScript on success
      command: rm <>.log
      when: PyScript|succeeded

দ্রষ্টব্য: এটি আপনার সমস্যা হ্যান্ডেল করার সর্বোত্তম উপায় নাও হতে পারে। তবে এটি একটি হ্যাক যা আমাকে আমার লগিং এবং পর্যবেক্ষণ করতে সহায়তা করেছিল।


2
আমি আরও একবার গিয়েছিলাম এবং বলব যে আপনি আপনার কমান্ড রচনাটি স্টাডআউট / স্ট্ডারকে রাখতে পারবেন তবে ব্যর্থতার প্রতিক্রিয়া হিসাবে কেবল এগুলি ফেলে দিন। সুতরাং, আপনার উপরোক্ত উদাহরণের উদাহরণ হিসাবে আপনি যদি ব্যর্থতার ঘটনায় মৃত্যুদণ্ড কার্যকর করতে চান না, তবে পাইস স্ক্রিপ্টে নিবন্ধিত স্টডআউট এবং স্ট্ডারকে কেবল আউটপুট করতে ব্যর্থ টাস্কটি ব্যবহার করে যখন আরসি! = 0 আরও সামগ্রিক সমাধান বলে মনে হয়। আপনি যদি উত্তরীয় ইনবিল্ট প্রক্রিয়া ব্যবহার করেন তবে উদাহরণস্বরূপ, যদি আপনি একটি নিয়ন্ত্রণ সার্ভারে উত্তরীয় লগিং সেট আপ করেন তবে সেই নিয়ন্ত্রণ সার্ভারটি উত্তরীয় লগে ব্যর্থতা লগ করবে। যা আমি মনে করি এটির জন্য সঠিক জায়গাটি হবে
hvindin

3

আমি মনে করি যে আপনাকে যা করতে হবে তা হ'ল আপনার প্রয়োজনীয় প্রতিটি কমান্ডের আউটপুটটি নিবন্ধভুক্ত করা (এটি একটি ভেরিয়েবলে সঞ্চয় করুন) এবং তারপরে কেবল ভেরিয়েবলটিকে একটি ফাইলের মধ্যে ফেলে দিন। এইভাবে আপনি পরে এটি পর্যালোচনা করতে পারেন।

tasks:
  - name: Dump all vars
    action: template src=templates/dumpall.j2 dest=/tmp/ansible.all

তারপরে ডাম্পল.জে ২:

Module Variables ("vars"):
--------------------------------
{{ vars | to_nice_json }} 

Environment Variables ("environment"):
--------------------------------
{{ environment | to_nice_json }} 

GROUP NAMES Variables ("group_names"):
--------------------------------
{{ group_names | to_nice_json }}

GROUPS Variables ("groups"):
--------------------------------
{{ groups | to_nice_json }}

HOST Variables ("hostvars"):
--------------------------------
{{ hostvars | to_nice_json }} 

উদাহরণস্বরূপ আমি ব্যবহার করছি থেকে এখানে


3

আমি যোগ করে এটি সমাধান

ignore_errors: true
register: results

no_log-কার্য এটি পরবর্তী কার্যটিতে জবাবদিহি চালিয়ে যায়, এমনকি যদি কার্যটি ব্যর্থ হয়। তারপরে পরবর্তী কার্যের জন্য একটি ডিবাগ টাস্কটি সংজ্ঞায়িত করুন, যা সর্বদা ব্যর্থ হয় এবং নিবন্ধভুক্ত ভেরিয়েবলকে আউটপুট করে, তবে কেবল পূর্ববর্তী কাজটি ব্যর্থ হলেই চালিত হয়:

- name: Error output
  debug:
     var: results
  failed_when: true
  when:
     results is failed

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


2

কেবলমাত্র ব্যর্থতার ক্ষেত্রে লগটি কার্যকর করতে এবং লগ পেতে চাইলে আমি যা করি তা অনুসরণীয় (শেল কোমন্ড দ্বারা উপস্থাপিত যেমন /bin/sh -c '...'ইনিশিয়েটর systemকলটি ব্যবহার না করে বা শেল ছাড়াই কমান্ডটি সরাসরি চালায় না) :

command 2&>1 > command-log.txt || cat command-log.txt

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

command 2&>1 > command-log.txt && rm command-log.txt || cat command-log.txt

Sh ম্যানপেজ থেকে উদ্ধৃতি &&এবং ||ব্যবহার :

পূর্ববর্তী পাইপলাইনটি যদি শূন্য (শূন্য নয়) মান দেয় তবে প্রতীক && (||) কেবলমাত্র নিম্নলিখিতটি কার্যকর করতে পারে।

এটি সম্ভবত জবাবদিহি করার সাথে সবচেয়ে মূর্খ উপায় নয় তবে কোনও কনফিগারেশন ম্যানেজমেন্ট সিস্টেমের সাথে খুব কম পোর্টেবল হওয়ার সুবিধা রয়েছে যাতে কমান্ড stdout প্রদর্শন করার ক্ষমতা দেয় giving


0

জবাবদিহি ধরে রেখে স্ট্রেডারে সঠিকভাবে ত্রুটি ছুঁড়ে ফেললে আপনি আউটপুট পুনঃনির্দেশ ব্যবহার করে কোনও প্রোগ্রামের ত্রুটির আউটপুট ক্যাপচার করতে পারেন:

some command 2> error.log

তবে আমি মনে করি না এটি কেসটি।

পরিবর্তে আপনি সম্ভবত এই নির্দেশিকাটি উল্লেখ করতে চাইবেন যে ত্রুটিগুলি কখন ঘটবে http://docs.ansible.com/ansible/playbooks_error_handling.html এবং তারপরে আপনার আউটপুট গ্রেপ করুন যা কোনও ফাইলে আউটপুট দেওয়ার আগে একটি ত্রুটি নির্দেশ করে

অর্থাত।

ansible-playbook my-playbook | grep 'error' > error.log


-2

আমি মনে করি আপনি যা খুঁজছেন তা খুব সহজেই স্টডআউট এবং স্ট্রিট ফাইলে ডাইরেক্ট করতে পারে।

সাধারণত, কিছু-কমান্ড &> লগফিল.লগ

বা কিছু বৈকল্পিক ....


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

আমি এই প্রশ্নের এই আংশিক উত্তর না। এটি শেল স্ক্রিপ্টের জন্য ঠিক আছে, তবে জবাবদিহি কোডিংয়ের জন্য অকেজো ।
ছানা

@ ছিক্স আমি মনে করি এটি উত্তরসূরীগুলির মধ্যে 'শেল' পদ্ধতি পদ্ধতির একটি বৈধ কাজ হতে পারে (যা আমি বেশি জানি না)
তেনসাইবাই

-2

টি লগিংয়ের জন্য খুব সাধারণ সরঞ্জাম হবে, আপনি নিম্নলিখিত কমান্ডটি উল্লেখ করতে পারেন।

eric@eric-MacBookPro:~$ ansible -m ping all | tee > /tmp/ansible.log
eric@eric-MacBookPro:~$ cat /tmp/ansible.log 
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

2
1. এটি কেবল একটি কাজকেই নয়, পুরো রানকে প্রভাবিত করে। ২. টিয়ের মাধ্যমে পাইপিংয়ের কোনও অর্থ নেই যদি আপনি তার স্টাডাউটটিকে কোনও ফাইলে পুনর্নির্দেশ করতে চলেছেন; আপনি কমান্ডটি এভাবে ব্যবহার করেন না। ৩. আপনি যদি টি সঠিকভাবে ব্যবহার করে থাকেন তবে এটি সমস্ত স্প্যামটি কনসোলটিতে আউটপুট দেয়, যা ওপি চায় না।
জিওনগ চিয়ামিভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.