আমার হোস্টার যেভাবে জিনিসগুলি করে সে কারণে আমাকে পরিষেবাগুলির জন্য একটি সিস্টেম ব্যবহার করতে হয়।
এই পরিষেবাটিতে একটি রান ফাইল রয়েছে যা এটি চালায় এবং দ্বিতীয় রান ফাইলে পাইপ দেয়। তবে আমি একটি (প্রদত্ত) পাইথন প্যাকেজ ব্যবহার করি যা স্টডআউটের পরিবর্তে স্ট্ডারগুলিতে লগ হয় এবং আমি যা চাই তা করতে পারি না।
সুতরাং আমার সেবার জন্য আমার একটি রান স্ক্রিপ্ট রয়েছে:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
যা লগিং সিস্টেম চালানোর জন্য পাইপ করা হয়:
#!/bin/sh
exec multilog t ./main
তবে পাইপ স্ট্যাডারকে সংযুক্ত করে না (আশানুরূপ হিসাবে)। সুতরাং গুগল করার পরে আমি আমার দৌলে পুনঃনির্দেশ যুক্ত করেছি:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
তবে এটি আমার সমস্যার সমাধান করে না: আমার নিজের আউটপুটগুলি (পাইথন প্রিন্ট ব্যবহার করে স্টাডাউট করতে) প্রত্যাশার মতো লগইন করা হয়। Stderr আউটপুট লগ করা হয়নি।
আমি যদি আমার সংশোধিত রানস্ক্রিপ্টটিকে দুটি ফাইলে পুনর্নির্দেশ করি তবে এটি দেখায় যে কোনও পুনর্নির্দেশ নেই (স্ট্ডার এখনও স্ট্ডারটিতে রয়েছে)। কাজ করতে আমার পুনঃনির্দেশকে কীভাবে সংশোধন করতে হবে?
dup2()
কোডে কল করার জন্য সন্ধান করুন। স্টার্ডার আউটপুট কোথায় যাচ্ছে কোন ধারণা ? আরেকটি চিন্তা: সম্ভবত আপনার হোস্টারের রান ফাইলটি আপনার কোড শুরু করার আগে এই পদ্ধতিতে স্ট্যাডারকে পুনঃনির্দেশ করছে।
import sys; print("Hello, stderr", file=sys.stderr)
নিশ্চিত হতে বলে ।
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
দেখুন এবং এই লগফাইলে একবার দেখুন।
exec ... 2>&1
সত্যিই স্ট্যান্ডার্ড আউট মধ্যে স্ট্যান্ডার্ড ত্রুটি যোগদান করে। তাই অন্য কিছু উদ্বেগজনক।