আমি কাস্টম অ্যাপ্লিকেশনটির জন্য একটি সহজ সিস্টেমড সার্ভিস ফাইল তৈরি করেছি। আমি ম্যানুয়ালি এটি চালানোর সময় অ্যাপ্লিকেশনটি ভালভাবে কাজ করে, তবে আমি যখন সিস্টেমড দিয়ে এটি চালনা করি তখন আমার সিপিইউ সর্বাধিক হয়ে যায়।
আমি আমার সমস্যাটি কোথায় আছে তা ট্র্যাক করার চেষ্টা করছি, তবে কোথায় আউটপুটটি পাওয়া যায় তা (বা আউটপুটটি কোথাও রাখার জন্য সিস্টেমড কনফিগার করার পদ্ধতি) আমি জানি না।
আমার পরিষেবা ফাইলটি এখানে:
[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/messages
কৌশলটি করেছেন। লগগুলি অনুসারে সমস্যাটি হ'ল, আমার ডেমনটি শুরুতে ক্র্যাশ হয়, তবুও আমি বলতে পারি যে এটি এখনও চলছে কারণ এটিতে এইচটিটিপি সার্ভার রয়েছে, এবং আমি এটি জিজ্ঞাসা করতে পারি। মনে হচ্ছে বাকি লগগুলি হারিয়ে যাচ্ছে ...
StandardOutput=tty
করার চেষ্টা করবেন না যাতে আপনি আপনার ডেমনটি চালু করার সময় কী ঘটছে তা দেখতে পান। এটি টার্মিনাল আউটপুট করা উচিত ( ttyS0
আপনার পর্দায় আউটপুট পেতে আপনি ব্যবহার করতে বা অনুরূপ হতে পারে)।
ExecStart=/usr/local/bin/filesync-client --port 2500 2>/tmp/filesync.log
/var/log/syslog
আউটপুট পরীক্ষা করার চেষ্টা করেছেন ? বেশিরভাগ সিস্টেমে স্টাফ লগইন হবে/var/log/
তাই আমি সেখানে যাচাই করেই শুরু করব। আপনিgrep
যদি আউটপুট জানেন তবে আপনি পাঠ্যের সন্ধান করতে ব্যবহার করতে পারেন :grep "my output" /var/log
কৌশলটি করা উচিত।