কোনও ফাইলে স্ক্রিন (প্রোগ্রাম) আউটপুট সংরক্ষণ করুন


130

স্ক্রিনের পুরো আউটপুট আমাকে পরে ফাইলের মধ্যে সংরক্ষণ করতে হবে later

কারণটি হ'ল আমি একটি সিরিয়াল বন্দর দিয়ে ফ্ল্যাশ মেমরি ডাম্প করছি, এটির সাথে ইন্টারফেস করার জন্য স্ক্রিন ব্যবহার করছি। আমি এটিকে মেমরির কাঠামো যাচাই করতে একটি ফাইলে সংরক্ষণ করতে চাই।

আমি চেষ্টা করেছিলাম:

$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt

এবং আমি পর্দা থেকে বাফারফিল ব্যবহার করার চেষ্টা করেছি, তবে কীভাবে এটি ব্যবহার করব তা আমি বুঝতে পারি না।

একটি সহজ উপায় আছে কি?


আমি যে প্রোডাকশন সেটিংটি ব্যবহার করছি তাতে স্ক্রিনের একাধিক উদাহরণ রয়েছে। যার আউটপুট আমার প্রয়োজন তার 'pts / 10' হিসাবে লাইন রয়েছে। সুতরাং একটি ফাইলের আউটপুট পেতে আমার কী করা উচিত?
সিড

উত্তর:


129

লগিংয়ের জন্য একটি কমান্ড লাইন বিকল্প রয়েছে। আউটপুটটি স্ক্রীনলগ.এন ফাইলে সংরক্ষণ করা হয়, যেখানে এন স্ক্রিনের একটি নম্বর। স্ক্রিনের ম্যান পৃষ্ঠা থেকে:

উইন্ডোগুলির জন্য স্বয়ংক্রিয় আউটপুট লগিং চালু করতে '-L' বলুন স্ক্রিন।


6
ধন্যবাদ। স্ক্রিনটি ইতিমধ্যে তার আউটপুট বাফারে কী আউটপুট দেওয়ার কোনও উপায় আছে? যেমন আমি লগিং সক্ষম করতে ভুলে গিয়েছি, তবে স্ক্রোল স্ক্রিন বাফারে আউটপুট পাওয়া যায় - কীভাবে কোনও ফাইলে এটি লিখব?
তাগর

48
শুধু .. একটি বিট আরো googled এখানে আমার repvious মন্তব্যের জন্য উত্তর নেই - stackoverflow.com/questions/4807474/... জন্য Ctrl + A এবং: COMMAND মোডে পেতে, তারপর যদি কারো হার্ডকপি -h <ফাইলের নাম> elsee এই করতে হবে।
তাগর

3
লগ ফাইল একই ডিরেক্টরিতে তৈরি করা হবে যেখানে আপনি স্ক্রিনটি কার্যকর করেছেন।
Lepe

1
গতকাল আমি একটি "স্ক্রিন-এল" করেছি, আমার এসএসএইচ অধিবেশনটি সংযোগ বিচ্ছিন্ন করেছি, আজ আবার লগ ইন করেছি এবং "স্ক্রিন-আর" ব্যবহার করে পুনরায় যোগাযোগ করেছি (আমার কেবল একটি ছিল) বেরিয়ে এসেছি এবং find / -name "screen*log"এমন কিছু করেছিলাম যা কিছুই খুঁজে পায় নি।
প্যাকওভারফ্লো


104

স্ক্রীনলগ.এন ফাইলটিতে লগিংগুলি সংরক্ষণ করতে আপনি কন্ট্রোল-এ + এইচ ব্যবহার করতে পারেন। বন্ধ করতে আরও একটি কন্ট্রোল-এ + এইচ।

Ca এইচ: "স্ক্রিনলগ.এন" ফাইলটিতে বর্তমান উইন্ডোটির লগিং শুরু / শেষ হয়।


5
+1 টি। যদি লগটি তৈরি করা যায় না, তবে স্ক্রিন উইন্ডোটির কার্যকরী ডিরেক্টরি পরিবর্তন করার চেষ্টা করুন: Ctrl- a+ :এবং উদাহরণস্বরূপ লিখুনchdir /home/foobar/baz
Chriki

2
Ca + H আমার জন্য কেবল স্ক্রিন উইন্ডো স্যুইচ করে। লগ ফাইলের সাথে কিছুই করার নেই!
aaa90210

2
@ aaa90210 এটি হার্ড-কপির জন্য h এর পৃথক প্রেসের পরে ctrl-a। সিআরটিএল-এর পরে শিফট-এইচের পৃথক প্রেস সম্পূর্ণ লগ ফাইল শুরু করে starts
জেমস

1
Ctrl-a H দ্বারা নির্মিত স্ক্রিনলগ.0 ফাইলটি সন্ধান করছেন? unix.stackexchange.com/questions/198881/…
স্ট্রভিল

20

নির্বাচিত উত্তরটি একাধিক সেশনের সাথে বেশ ভাল কাজ করে না এবং কোনও কাস্টম লগ ফাইলের নাম নির্দিষ্ট করার অনুমতি দেয় না।

একাধিক স্ক্রিন সেশনের জন্য, এটি আমার সূত্র:

  1. প্রতিটি প্রক্রিয়ার জন্য একটি কনফিগারেশন ফাইল তৈরি করুন:

    logfile test.log
    logfile flush 1
    log on
    logtstamp after 1
    logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
    logtstamp on
    

    আপনি যদি "ফ্লাইতে" করতে চান তবে আপনি logfileস্বয়ংক্রিয়ভাবে পরিবর্তন করতে পারেন । \012, "নতুন লাইন" অর্থ হিসেবে ব্যবহার \nলগ ফাইল তে এটি প্রিন্ট হবে: উৎস

  2. "-C" এবং "-L" পতাকা দিয়ে আপনার কমান্ডটি শুরু করুন:

    screen -c ./test.conf -dmSL 'Test' ./test.pl
    

    এটাই. প্রথম ফ্লাশের পরে আপনি "টেস্ট.লগ" দেখতে পাবেন:

    ...
    6 Something is happening...
    [ test.pl: 2016-06-01 13:02:53 ]
    7 Something else...
    [ test.pl: 2016-06-01 13:02:54 ]
    8 Nothing here
    [ test.pl: 2016-06-01 13:02:55 ]
    9 Something is happening...
    [ test.pl: 2016-06-01 13:02:56 ]
    10 Something else...
    [ test.pl: 2016-06-01 13:02:57 ]
    11 Nothing here
    [ test.pl: 2016-06-01 13:02:58 ]
    ...
    

আমি দেখতে পেলাম যে "-L" এখনও কনফিগারেশন ফাইলে "লগ ইন" থাকা অবস্থায় থাকা আবশ্যক।

আমি স্ক্রিন দ্বারা ব্যবহৃত টাইম ফর্ম্যাট ভেরিয়েবলগুলির (যেমন% মি) একটি তালিকা পাইনি। যদি আপনার কাছে সেই ফর্ম্যাটগুলির একটি লিঙ্ক থাকে তবে দয়া করে এটি পোস্ট করুন।

অতিরিক্ত

আপনি যদি "ফ্লাইতে" করতে চান তবে আপনি এই স্ক্রিপ্টটি ব্যবহার করতে পারেন:

#!/bin/bash
if [[ $2 == "" ]]; then
    echo "Usage: $0 name command";
    exit 1;
fi
name=$1
command=$2
path="/var/log";
config="logfile ${path}/${name}.log
logfile flush 1
log on
logtstamp after 1
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\"
logtstamp on";
echo "$config" > /tmp/log.conf
screen -c /tmp/log.conf -dmSL "$name" $command
rm /tmp/log.conf

এটি ব্যবহার করতে, এটি সংরক্ষণ করুন (স্ক্রিন.শ) এবং + এক্স অনুমতি সেট করুন:

./screen.sh TEST ./test.pl

... এবং ./test.pl সম্পাদন করবে এবং /var/log/TEST.log এ একটি লগ ফাইল তৈরি করবে


1
আপনাকে ধন্যবাদ - on-the-flyঅংশটি বেশ কার্যকর।
রাম আরএস

1
আপ পর তৈরি করেছেন এবং মাছি এ মোছা কনফিগ ফাইলের সাথে একটি পর্দা রান রাতারাতি একটি আউট errored screen -rসঙ্গে "Unable to open "/tmp/log.conf"। এছাড়াও, পর্দাটি [detached]রাজ্য থেকে অস্তিত্বের দিকে যায়। সমস্যা কি হতে পারে?
রাম আরএস

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

1
আমি মনে করি আপনি ঠিক, এটা কোন পর্দা বিনষ্ট করা উচিত যা নির্বাহ হিসাবে একই প্রক্রিয়া যা ভাবে, দৌড়াচ্ছে যদি: screen bash। অন্য কোনও প্রক্রিয়া যদি আপনার স্ক্রিনটি হারাচ্ছে, তবে এটি 'মৃত' হিসাবে তালিকাবদ্ধ হওয়া উচিত, তবে অদৃশ্য হয়ে যাবে না। আমি নিশ্চিত না যে এটি কী হতে পারে।
লেপ 1

1
@ কিউরবনে: চমৎকার ধরা! এই সমস্ত সময় এবং আমি এটি লক্ষ্য করি না। আমি সেই অনুযায়ী উত্তর আপডেট করেছি।
Lepe

20

নিম্নলিখিত কমান্ডটি স্ক্রিন সংস্করণ 4.06.02 এর জন্য কাজ করে:

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

স্ক্রিনের ম্যান পৃষ্ঠা থেকে :

-Logfile file : By default logfile name is "screenlog.0".
                You can set new logfile name with the "-Logfile" option.

আপনি এর বিদ্যমান সংস্করণটিকে পরীক্ষা করতে পারবেন স্ক্রিন ব্যবহার পর্দা -version । আপনি https://www.gnu.org/software/screen/ থেকে সর্বশেষ স্ক্রিন সংস্করণটি ডাউনলোড এবং ইনস্টল করতে পারেন ।


এছাড়াও আপনি কমান্ড_ টু_বে_কে ফাঁকা হিসাবে ছেড়ে দিতে এবং দীর্ঘ চলমান চাকরির একটি সিরিজ লিখতে পারেন
devssh

স্ক্রিনের ওয়ার্কিং ডিরেক্টরিতে লেখার অনুমতি থাকার কথা মনে রাখবেন, কারণ অন্যথায় এটি নিঃশব্দে ব্যর্থ হয় (কোনও সতর্কতা ছাড়াই কেবল লগইন করা হয় না)
ঠিক আছে

15

ম্যাক টার্মিনালের জন্য:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200

বিস্তারিত

  • script: "টার্মিনাল সেশনের ধরণের স্ক্রিপ্ট তৈরি করতে" একটি বিল্ট-ইন অ্যাপ্লিকেশন
  • -a: আউটপুট ফাইল যোগ করুন
  • -t 0: আউটপুট ফাইলে লেখার মধ্যে সময় 0 সেকেন্ড হয়, সুতরাং আউট.টিএসটি প্রতিটি নতুন চরিত্রের জন্য আপডেট করা হয়
  • out.txt: কেবলমাত্র আউটপুট ফাইলের নাম
  • screen /dev/ttyUSB0 115200: বাহ্যিক ডিভাইসে সংযোগ করার জন্য প্রশ্ন থেকে আদেশ

তারপরে আপনি ফাইলটি আপডেট হচ্ছে তা দেখতে লেজ ব্যবহার করতে পারেন।

tail -100 out.txt

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

10

Ctrl+Aতাহলে Shift+Hআমার জন্য কাজ করে। screenlog.0প্রোগ্রামটি চলমান অবস্থায় আপনি ফাইলটি দেখতে পারবেন ।


1
Ctrl + A এর পরে এইচ।
শিমন ডুডকিন

1
@ শিমনডুডকিন আমি চেষ্টা করেছিলাম যে কোনও কারণে ডেবিয়ান নিয়ে কাজ করে না। যদিও অন্যদের জন্য সহায়ক হতে পারে। ধন্যবাদ!
জেগডসফট

5

ইউনিক্সের অধীনে 'স্ক্রিপ্ট' কমান্ডটি কৌশলটি করা উচিত। আপনার নতুন কনসোলের শুরুতে এটি চালান এবং আপনার ভাল হওয়া উচিত।


মহান! এটি কোথায় এটি মুদ্রণ করে?
এডোয়ার্ডু

এটি কেবল একটি ফাইল লিখতে হবে। কমান্ডটি কিছুটা অগোছালো তবে আমি মনে করি এটি এটি কিছুটা সমাধান করতে পারে: linux.byex উদাহরণ.com
রুবেন

5

এখানে একটি কৌশল: এটি মোড়ানো sh -c!

screen sh -c './some-script 2>&1 | tee mylog.log'

যেখানে 2>&1স্টার্ডারকে স্টডআউটে পুনঃনির্দেশ করে তাই teeত্রুটি বার্তাগুলি ধরতে এবং লগ করতে পারে।


5

নিম্নলিখিতগুলি কার্যকর হতে পারে ( এটিতে পরীক্ষিত: লিনাক্স / উবুন্টু 12.04 (যথাযথ পাঙ্গোলিন)):

cat /dev/ttyUSB0

উপরেরটি ব্যবহার করে, আপনি তারপরে আপনার প্রয়োজনীয় সমস্ত পুনঃনির্দেশগুলি করতে পারেন। উদাহরণস্বরূপ, আপনার ফাইলে সংরক্ষণ করার সময় আপনার কনসোলে আউটপুট ডাম্প করতে, আপনি যা করতে পারেন:

cat /dev/ttyUSB0 | tee console.log

এই আমার জন্য নিখুঁতভাবে কাজ করেছে। আমি আরডুইনো ডেটা ক্যাপচার সেশন থেকে সিরিয়াল মনিটর আউটপুট লগ করছি।
ইয়ান পিটস

3

ইতিমধ্যে সক্রিয়ভাবে চলমান স্ক্রিন থেকে আপনার পুরো স্ক্রোলব্যাক বাফারের আউটপুট সংরক্ষণ করার প্রয়োজন হলে আলাদা উত্তর:

Ctrl-a [ g SPACE G $ >.

এটি আপনার পুরো বাফারটিকে / tmp / স্ক্রিন-এক্সচেঞ্জ এ সংরক্ষণ করবে


2

বিদ্যমান স্ক্রিন লগ দ্বারা সংরক্ষণ করা যেতে পারে:

Ctrl+A : হার্ডকপি -h ফাইল নাম

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