15.04-এ সিস্টেমেড ইউনিটের স্টাডাউট লগ করবে না


12

আমি বর্তমানে ওয়েব সার্ভার হিসাবে একটি সিস্টেমড ইউনিট তৈরি করার চেষ্টা করছি। বর্তমানে, আমার foo.serviceফাইলটি নীচের মত দেখাচ্ছে:

[Unit]
Description=The Foo Web Server

[Service]
Type=simple
ExecStart=/opt/foo/.cabal-sandbox/bin/foo

[Install]
WantedBy=multi-user.target

fooএক্সিকিউটেবল স্বয়ংক্রিয়ভাবে stdout- এ সব HTTP অনুরোধ লগ - এই ভাল পরীক্ষা করা হয়। যাইহোক, যখন আমি লগগুলি দিয়ে journalctl -u fooদেখি, আমি কেবল এই জাতীয় আউটপুট পাই:

...
May 06 17:46:57 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:46:57 localhost systemd[1]: Started Foo Web Server.
May 06 17:46:57 localhost systemd[1]: Starting The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Started The Foo Web Server.
May 06 17:47:08 localhost systemd[1]: Starting The Foo Web Server...

কেউ কেন ব্যাখ্যা করতে পারে যে এটি সমস্ত স্টডআউট আউটপুট লগিং করছে না? আমি এই পূর্ববর্তী প্রশ্নের সংক্ষিপ্তভাবে তাকিয়েছিলাম , তবে এটি কোনও উপকারে আসে না - তবে এটি "... সম্পূর্ণ সিস্টেমড ব্যবহার না করে এমন সিস্টেমে কাজ করতে পারে না" -এর ধারায় কিছু প্রমাণিত হয়েছে - এটি উবুন্টু 15.04 এর ক্ষেত্রেই হবে? ? আপনাকে আগাম ধন্যবাদ, এর সাথে যে কোনও সহায়তা করা অনেক প্রশংসা হবে!


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

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

আমার একই সমস্যা ছিল এবং পাইথনের মুদ্রণ ফাংশনটির সাথে বাফারিংয়ের সমস্যা ছিল! যেহেতু আমি পাইথন 3 ব্যবহার করছিলাম আমি ঠিক এর মতো কিছু ব্যবহার করেছি print('Hello World!', flush=True)এবং এটি কৌশলটি করেছে! আউটপুট জার্সিটেল-এ প্রদর্শিত শুরু হয়েছে।
টিমব্রাম

উত্তর:


9

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

সেটভুফ লাইব্রেরি কল ব্যবহার করে অ্যাপের ভিতরে বাফারিং পরিবর্তন করা যেতে পারে be

তবে এটি প্রবর্তনের সময় stdbuf কমান্ড দিয়েও করা যেতে পারে :

ExecStart=/usr/bin/stdbuf -oL /opt/foo/.cabal-sandbox/bin/foo

(লাইন-বাফার মামলার জন্য)


এই আমার দিন বাঁচা! আপনাকে অনেক ধন্যবাদ. তবে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি যে ExecStart=/my/foo/programপরিষেবাটি বন্ধ হয়ে গেলে কেন স্টাডাউট লগটি ফ্লাশ করা হয় না, পরিবর্তে সম্পূর্ণ অদৃশ্য হয়ে যায়।
wlnirvana

0

উবুন্টু 15.04-এ ডিফল্টরূপে , সিস্টেমযুক্ত জার্নালগুলি কেবলমাত্র অস্থির এবং রাখা হয় /run/systemd/journalএবং প্রতিটি রিবুটে হারিয়ে যায়। অবিচ্ছিন্ন সিস্টেমেড জার্নালটি ব্যবহার করার জন্য আপনাকে /var/log/journalডিরেক্টরি তৈরি করতে হবে (এবং সিস্টেমড-জার্নাল্ড। সার্ভিস পুনরায় চালু করতে হবে )।

সুতরাং, হতে পারে, stdoutআউটপুট কেবল পুনঃনির্দেশিত হয় syslogএবং সিস্টেমড জার্নালে রাখা হয় না । তার জন্য, উপরে বর্ণিত হিসাবে আপনার একটি ধ্রুবক সিস্টেমড জার্নাল ব্যবহার করতে হতে পারে ।

আপনি /var/log/syslogআপনার fooলগ জন্য পরীক্ষা করেছেন ?


/var/log/journalআপনি উল্লিখিত হিসাবে আমি তৈরি করেছি , তবে আমি আমার সিস্টেমেড পরিষেবাটি কোনওভাবেই দেখছি না। মধ্যে /var/log/syslogআমি তন্ন তন্ন এটি দেখতে।
লগঅফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.