স্ট্যাডার [বন্ধ] পুনর্নির্দেশের পরে বাশ স্ক্রিপ্টের আউটপুট পাইপ করা


9

আমার হোস্টার যেভাবে জিনিসগুলি করে সে কারণে আমাকে পরিষেবাগুলির জন্য একটি সিস্টেম ব্যবহার করতে হয়।

এই পরিষেবাটিতে একটি রান ফাইল রয়েছে যা এটি চালায় এবং দ্বিতীয় রান ফাইলে পাইপ দেয়। তবে আমি একটি (প্রদত্ত) পাইথন প্যাকেজ ব্যবহার করি যা স্টডআউটের পরিবর্তে স্ট্ডারগুলিতে লগ হয় এবং আমি যা চাই তা করতে পারি না।

সুতরাং আমার সেবার জন্য আমার একটি রান স্ক্রিপ্ট রয়েছে:

#!/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 আউটপুট লগ করা হয়নি।

আমি যদি আমার সংশোধিত রানস্ক্রিপ্টটিকে দুটি ফাইলে পুনর্নির্দেশ করি তবে এটি দেখায় যে কোনও পুনর্নির্দেশ নেই (স্ট্ডার এখনও স্ট্ডারটিতে রয়েছে)। কাজ করতে আমার পুনঃনির্দেশকে কীভাবে সংশোধন করতে হবে?


5
exec ... 2>&1সত্যিই স্ট্যান্ডার্ড আউট মধ্যে স্ট্যান্ডার্ড ত্রুটি যোগদান করে। তাই অন্য কিছু উদ্বেগজনক।
ট্রিগার করুন

3
পাইথন স্ক্রিপ্টটি স্টডারার বন্ধ করে কোনও ফাইল হিসাবে এটি পুনরায় খোলার কোনও সুযোগ আছে? dup2()কোডে কল করার জন্য সন্ধান করুন। স্টার্ডার আউটপুট কোথায় যাচ্ছে কোন ধারণা ? আরেকটি চিন্তা: সম্ভবত আপনার হোস্টারের রান ফাইলটি আপনার কোড শুরু করার আগে এই পদ্ধতিতে স্ট্যাডারকে পুনঃনির্দেশ করছে।
এডওয়ার্ড ফ্যাল্ক

1
আপনি কি সম্পূর্ণরূপে নিশ্চিত করতে পারবেন যে পাঠ্যটি স্ট্ডারকে প্রেরণ করা হচ্ছে? স্ক্রিপ্টটি এমনটি দিয়ে প্রতিস্থাপন করুন যা import sys; print("Hello, stderr", file=sys.stderr)নিশ্চিত হতে বলে ।
rosuav

3
সত্যিই স্ট্যাডার? এটি ব্যবহার করে exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.logদেখুন এবং এই লগফাইলে একবার দেখুন।
ইঙ্গোপিংগো

2
আপনি যদি sh এর পরিবর্তে ব্যাশ ব্যবহার করেন তবে কী হবে?
লুসিয়ানো এন্ড্রেস মার্টিনি

উত্তর:


0

চেষ্টা করুন:

#!/usr/bin/env bash
exec 2>&1
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

অর্থাত্: exec 2>&1একটি পৃথক লাইনে স্টাডারকে একই জিনিসটিতে পুনঃনির্দেশ করতে বলা স্টডআউট যাচ্ছে (আপনার টার্মিনাল? বা কোনও ক্রন্টবলে মেল?), সিডি ও এক্সিকিউট দ্বারা বিদ্যমান প্রক্রিয়াটি অজগর 3.2 দ্বারা প্রতিস্থাপন করবে। দ্রষ্টব্য যে আমি কম পরিবর্তনের জন্য sh এর পরিবর্তে ব্যাশে স্যুইচ করেছি তবে সাধারণত অনেক বেশি নির্ভরযোগ্যতা। যদি এটি কাজ করে তবে দুর্দান্ত, যদি না আরও কিছু ভাল জ্ঞানী ব্যক্তি পদক্ষেপ নেবেন this (এই মুহূর্তে আমার কাছে গবেষণা করার সময় নেই)

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