সিস্টেমড সার্ভিসের stdout / stderr দেখুন


175

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

আমি আমার সমস্যাটি কোথায় আছে তা ট্র্যাক করার চেষ্টা করছি, তবে কোথায় আউটপুটটি পাওয়া যায় তা (বা আউটপুটটি কোথাও রাখার জন্য সিস্টেমড কনফিগার করার পদ্ধতি) আমি জানি না।

আমার পরিষেবা ফাইলটি এখানে:

[Unit]
Description=Syncs files with a server when they change
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/local/bin/filesync-client --port 2500
WorkingDirectory=/usr/local/lib/node_modules/filesync-client
Restart=always

[Install]
WantedBy=multi-user.target

অ্যাপ্লিকেশন জুড়ে, আমি stdout এবং stderr আউটপুট।

আমি কীভাবে আমার ডেমন আউটপুট পড়তে পারি?

সম্পাদনা:

আমি খুঁজে পেয়েছি man systemd.exec, যা StandardOutput=বিকল্পটি উল্লেখ করেছে , তবে আমি কীভাবে এটি ব্যবহার করব তা নিশ্চিত নই। থেকে man পৃষ্ঠা :

StandardOutput=

সম্পাদিত প্রক্রিয়াগুলির ফাইল বর্ণনাকারী 1 (STDOUT) এর সাথে সংযুক্ত রয়েছে এমন নিয়ন্ত্রণ করে। এক লাগে উত্তরাধিকারী , নাল , TTY , syslog- র , kmsg , kmsg + + কনসোল , syslog- র + + কনসোল বা সকেট

যদি স্ট্যান্ডার্ড ইনপুট ফাইল ডেস্ক্রিপ্টর উত্তরাধিকারী হিসাবে সেট করা হয় মান আউটপুট জন্য নকল। নাল এ সেট করা থাকলে স্ট্যান্ডার্ড আউটপুটটির সাথে সংযুক্ত হবে /dev/null, অর্থাৎ এতে লেখা সমস্ত কিছুই নষ্ট হয়ে যাবে। যদি tty স্ট্যান্ডার্ড আউটপুট সেট করা থাকে তবে একটি টিটিটির সাথে সংযুক্ত হয়ে যাবে (এর মাধ্যমে কনফিগার করা হিসাবে TTYPath=নীচে দেখুন)। যদি টিটিওয়াই আউটপুট জন্য ব্যবহার করা হয় তবে শুধুমাত্র সম্পাদিত প্রক্রিয়া টার্মিনালের নিয়ন্ত্রণ প্রক্রিয়া হয়ে ওঠে না, এবং ব্যর্থ হয় না বা টার্মিনালটি ছেড়ে দেওয়ার জন্য অন্যান্য প্রক্রিয়াগুলির জন্য অপেক্ষা করে না। syslog সিস্টেম লগারের সাথে স্ট্যান্ডার্ড আউটপুট সংযোগ করে ger kmsg এটিকে কার্নেল লগ বাফারের সাথে সংযুক্ত করে যা dmesg (1) এর মাধ্যমে অ্যাক্সেসযোগ্য। syslog + কনসোল এবং কেএমএসজি + কনসোলএকইভাবে কাজ করুন তবে আউটপুটটি সিস্টেম কনসোলেও অনুলিপি করুন। সকেট সকেট অ্যাক্টিভেশন থেকে একটি সকেটের সাথে স্ট্যান্ডার্ড আউটপুটকে সংযুক্ত করে, শব্দার্থকগুলির সম্পর্কিত বিকল্পটির সাথে সমান StandardInput=। এই সেটিংটি উত্তরাধিকার সূত্রে ডিফল্ট।

এর অর্থ কি এই যে আমার একমাত্র বিকল্প? আমি উদাহরণস্বরূপ, আউটপুট /dev/shmবা অন্য কিছু রাখতে চাই। আমি মনে করি আমি ইউনিক্স ডোমেন সকেট ব্যবহার করতে পারি এবং একটি সাধারণ শ্রোতা লিখতে পারি তবে এটি কিছুটা অপ্রয়োজনীয় বলে মনে হয়।

আমার কেবল এটির ডিবাগিংয়ের জন্য প্রয়োজন, এবং আমি সম্ভবত বেশিরভাগ লগগুলি সরিয়ে শেষ করব এবং আউটপুটটিকে সিসলগে পরিবর্তন করব।


আপনি কি /var/log/syslogআউটপুট পরীক্ষা করার চেষ্টা করেছেন ? বেশিরভাগ সিস্টেমে স্টাফ লগইন হবে /var/log/তাই আমি সেখানে যাচাই করেই শুরু করব। আপনি grepযদি আউটপুট জানেন তবে আপনি পাঠ্যের সন্ধান করতে ব্যবহার করতে পারেন : grep "my output" /var/logকৌশলটি করা উচিত।
sbtkd85

@ sbtkd85 - ভাল, আমার কাছে নেই /var/log/syslog, তবে /var/log/messagesকৌশলটি করেছেন। লগগুলি অনুসারে সমস্যাটি হ'ল, আমার ডেমনটি শুরুতে ক্র্যাশ হয়, তবুও আমি বলতে পারি যে এটি এখনও চলছে কারণ এটিতে এইচটিটিপি সার্ভার রয়েছে, এবং আমি এটি জিজ্ঞাসা করতে পারি। মনে হচ্ছে বাকি লগগুলি হারিয়ে যাচ্ছে ...
বেটগ্যামিত

কেন সেট StandardOutput=ttyকরার চেষ্টা করবেন না যাতে আপনি আপনার ডেমনটি চালু করার সময় কী ঘটছে তা দেখতে পান। এটি টার্মিনাল আউটপুট করা উচিত ( ttyS0আপনার পর্দায় আউটপুট পেতে আপনি ব্যবহার করতে বা অনুরূপ হতে পারে)।
sbtkd85

3
স্ট্যান্ডার্ড আইও পুনঃনির্দেশ অপারেটরদের এই প্রসঙ্গে কাজ করা উচিত নয়। এরকমই কিছুExecStart=/usr/local/bin/filesync-client --port 2500 2>/tmp/filesync.log
দীপক মিত্তাল

আসলে আপনার সিপিইউকে কী গালি দিচ্ছে? এটি কি সিস্টেমড, আপনার পরিষেবা বা সিস্টেম (যেমন সিস্টেমড পাগল হওয়ার কারণে পরিষেবার নতুন কপি তৈরি করে)?
পিটার্ফ

উত্তর:


183

হালনাগাদ

মাইকম্যাকানা নোট হিসাবে, সিস্টেমড জার্নাল এখন বেশিরভাগ ডিস্ট্রোসের জন্য স্ট্যান্ডার্ড লগিং ডিভাইস। দেখার জন্য stdoutএবং stderrএকটি systemd ইউনিট ব্যবহার journalctlকমান্ড।

sudo journalctl -u [unit]

আসল উত্তর

ডিফল্টরূপে stdoutএবং stderrএকটি সিস্টেমড ইউনিটকে সিসলগে প্রেরণ করা হয়।

আপনি যদি পুরো সিস্টেমড ব্যবহার করছেন তবে এটি মাধ্যমে অ্যাক্সেসযোগ্য হবে journalctl। ফেডোরার ক্ষেত্রে এটি হওয়া উচিত /var/log/messagesতবে আপনার নিয়ম যেখানে সিসলগ বলে সেখানে এটি স্থাপন করা উচিত ।

পোস্টের তারিখের কারণে এবং ধরে নেওয়া বেশিরভাগ লোকেরা সিস্টেমডের সংস্পর্শে এসেছেন তারা ফেডোরার মাধ্যমে, সম্ভবত আপনি এখানে বর্ণিত বাগটি পেয়েছিলেন: https://bugzilla.redhat.com/show_bug.cgi?id=754938 এটি রয়েছে এটি কীভাবে সমস্ত কাজ করে তার একটি ভাল ব্যাখ্যা =) (এটি সেলিনাক্স-পলিসিতে একটি ত্রুটি ছিল যা ত্রুটি বার্তাগুলি লগ না করায় এবং এটি স্থির করে দেওয়া হয়েছিল selinux-policy-3.10.0-58.fc16)


5
নোট করুন যে এর মতো স্ট্যান্ডার্ড লগিং প্রক্রিয়াটি ডিফল্টরূপে স্থায়ী লগগুলি তৈরি করবে না । এটি করতে, আপনাকে / var / লগ / জার্নাল তৈরি করতে হবে এবং তারপরে চালনা করতে হবেsudo systemctl restart systemd-journald
mlissner

1
কি সিসলগ সুবিধা এবং অগ্রাধিকার?
jrwren

2
এটি আমার পক্ষে কাজ করেছে: StandardOutput=syslog+consoleএবং এর StandardError=syslog+consoleপরে আমার ইউনিট থেকে সমস্ত আউটপুট জার্নালটিএল-এ উপস্থিত হয়েছিল। স্পষ্টতই ডিফল্ট সেটিংসটি ভুল ছিল। (যেমন /etc/systemd/system.conf এ ডিফল্ট
স্ট্যান্ডার্ডআউটপুট

2
-fআমার জন্য সহায়ক ছিল। পরিবর্তনগুলি ঘটেছিল হিসাবে লগ অনুসরণ করেছে (ব্যবহারের ক্ষেত্রে মাইনক্রাফ্ট সার্ভারটি অনুসরণ করা হয়েছিল যা ডেমন হিসাবে চলছিল)
সন্দেহজনকভাবে হত্যা করা উচিত

2
এটি আমাকে পাগল করে দিচ্ছে ... একটি স্ট্যান্ডার্ড দেবিয়ান স্ট্রেচ জার্নাক্টেল আমাকে স্ট্যান্ডার্ড আউটপুটটির কোনওটি দেখাবে না। আমি এমনকি ব্যবহার /usr/bin/stdbuf -oL <cmd>এবং একটি স্পষ্ট StandardOutput=journal। এখনো কিছুনা.
jlh

81

খাটো, সহজ, অ-উত্তরাধিকারের উত্তর:

sudo journalctl -u [unitfile]

যেখানে [ইউনিটফাইল] সিস্টেমযুক্ত .serviceনাম। উদাহরণস্বরূপ, এর বার্তা দেখতে myapp.service,

sudo journalctl --unit=myapp

বাস্তব সময়ে লগগুলি অনুসরণ করতে:

sudo journalctl -f -u myapp

4
মনে রাখবেন যে আপনি sudoযদি কোনও No journal files foundত্রুটি পান তবে আপনার হতে পারে ।
bigjosh

5
সিসলগ উত্তরাধিকার নয় ...
মাইলস রাউথ

2
এটি বর্তমান লিনাক্সের ডিস্ট্রোজে রয়েছে। আপনি সত্যই সিসলগ পছন্দ করতে পারেন তবে তারা যা পাঠায় তা বদলায় না।
মাইকমেকানা

1
অবশ্যই। এবং এটি সিসলগও ব্যবহার করে। আমার বক্তব্যটি ছিল না যে সিস্টেমড ব্যবহার হয় না, তবে সেই সিসলোগটি উত্তরাধিকার নয়।
গোলকধাঁধা

6
@ জেকম্পটন যদি বর্তমান লিনাক্স ডিস্ট্রোজে সমস্ত লগইন জার্নালড ব্যবহার করে, এবং সিসলগ প্রয়োজনীয় নয় এবং কেবল সামঞ্জস্যের জন্য ব্যবহৃত হয়, তবে এটি যৌক্তিকভাবে অনুসরণ করে যে সিসলগটি উত্তরাধিকার is
মাইকম্যাকানা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.