আমি কীভাবে আপস্টার্ট স্ক্রিপ্টগুলি ডিবাগ করব?


67

কিছু কারণে আমি অ্যাপার্টমেন্ট আপগ্রেড করার সময় একটি ত্রুটি পাচ্ছি , যার কারণ

% sudo service apport start
start: Job failed to start

সিসভিনেটের অধীনে, আমি উদাহরণস্বরূপ চালিয়ে এই ধরণের সমস্যাটি ডিবাগ করতে পারি

sudo sh -x /etc/init.d/whatever start

তবে এটি আপস্টার্টে মানচিত্রের মতো বলে মনে হচ্ছে না। আমার আর কী চেষ্টা করা উচিত?

দেখা যাচ্ছে যে সেখানে একটি কার্যকারিতা রয়েছে যা ইনস্টলটিকে এগিয়ে যেতে দেয়। তবে কীভাবে স্ক্রিপ্টটি কেউ আবিষ্কার করবেন সে সম্পর্কে আমি সাধারণ প্রশ্নে আগ্রহী।


1
আমি আরও পুঙ্খানুপুঙ্খ জবাব নিয়ে কাজ করছি, তবে কাজের সংযোগের জন্য লিঙ্কের জন্য ধন্যবাদ, আমার কাছে আজ ন্যাটি আপডেট করার ঘটনা ঘটেছে!
মার্ক রাসেল

হাহা, এবং তারা 12 মিনিট আগে এই সমাধানটি প্রকাশ করেছে। বেটা চালানো কি মজাদার নয়? (আসলেই নয়!)
মার্ক রাসেল

+ মুহাম্মদ নীচে সঠিক উত্তর পোস্ট করেছেন।
ট্র্যাভিস রেডার 19

আমি দরকারী ডিবাগিং তথ্য খুঁজে পেয়েছি /var/log/syslog
ম্যাট

উত্তর:


29

নীচের সমস্ত তথ্য (এবং বেশ কিছুটা উপকারী স্টার্ট সহায়তা) দ্য অফস্টার্ট কুকবুক থেকে প্রাপ্ত । বিভাগ 18 ডিবাগিং কভার। http://upstart.ubuntu.com/cookbook/#debugging

একটি আপস্টার্ট কাজের "স্ক্রিপ্ট" স্তরের সন্ধানের এই নির্দিষ্ট ক্ষেত্রে আপনার "স্ক্রিপ্ট" শব্দের ঠিক নীচে নিম্নলিখিত লাইন যুক্ত করা উচিত:

exec 2>>/dev/.initramfs/myjob.log
set -x

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

এটিও লক্ষ করা উচিত যে সমস্ত স্ক্রিপ্টগুলি এমন set -eকোনও কমান্ড দিয়ে চালিত হয় যা ব্যর্থ হয় এমন কোনও কমান্ড সম্পূর্ণরূপে স্ক্রিপ্ট থেকে প্রস্থান করে। যার অর্থ উপলব্ধি করা হয়, যেমন স্ক্রিপ্টগুলি রুট হিসাবে চালিত করার সময় কারও খুব যত্নশীল হওয়া উচিত।

আমি আপস্টার্ট চাকরীর সাথে যে কেউ কাজ করছে তার জন্য সাধারণভাবে উপরের লিঙ্কযুক্ত আপস্টার্ট কুকবুকের সাথে পরামর্শ করার পরামর্শ দিচ্ছি।


এর জন্য ধন্যবাদ, আমি যদি বাগটি সমাধান করা না দেখে থাকি, তবে সম্ভবত set -xআপনি পরামর্শ হিসাবে স্ক্রিপ্টটি পরিবর্তন করে নেবেন । আমি প্রায়শই ভাবছিলাম যে এটি করার কোনও পরিষ্কার উপায় আছে কিনা।
পুলি

হ্যাঁ, আমি জানি না (এবং এটি যদি রান্নাঘরে না থাকে, তার মানে সম্ভবত সেখানে নেই)। সেই ধারণাটি বাদ দিয়ে, উল্লিখিত বেশিরভাগ ডিবাগিং কৌশলগুলি আপস্টার্ট এবং আপস্টার্ট ইভেন্টগুলি নিজেরাই সমস্যা সমাধানের বিষয়ে বেশি, যেখানে আমি সাধারণত নিজেকে খুঁজে পাই। :)
মার্ক রাসেল

এবং তবুও এই পদ্ধতিটি ব্যর্থ হবে যদি setuidএবং setgidচাকরিতে ব্যবহৃত হয়।
0xC0000022L

/dev/.initramfs সর্বদা উপস্থিত থাকে না। আমি সবেমাত্র এমন একটি মেশিন নিয়ে এসেছি যার এই পাথ নেই।
সার্জে বোর্শ

110

আপস্টার্ট একই পরিষেবাতে লগ ফাইলে আপনার পরিষেবা প্রয়োগের লগ করে /var/log/upstart/your-service-name.log। এটি সহায়ক হতে হবে।


2
ঠিক আছে, দেখে মনে হচ্ছে এটিতে চাকরির স্টাডার অন্তর্ভুক্ত রয়েছে, তাই যদি আমি set -xএটি চালু করি তবে সম্ভবত এটি সেখানে প্রদর্শিত হবে।
পুলি

1
আমি আমার /etc/init.d/Xservice স্ক্রিপ্টে প্রতিধ্বনি ভিত্তিক লগ স্টেটমেন্ট রেখেছি তবে এটি এই অবস্থানটিতে প্রদর্শিত হয় না! ওএস: উবুন্টু 14.04 ট্রাস্টি
চ্যাম্পে

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

4
এটি 16.04-এ আর সত্য হতে পারে না, আপাতদৃষ্টিতে 15.10 থেকে কমপক্ষে: সেই ডিরেক্টরিতে থাকা শেষ ফাইলগুলি 15.10 প্রকাশের আগে ডান থেকে নির্ধারিত।
এফজিএম

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