तारीख के आउटपुट को स्टोर करें और एक फाइल पर कमांड देखें


23

मैं लिनक्स के लिए नौसिखिया हूं और मैं एक कमांड देखने और इसे एक फाइल में लॉग इन करने की कोशिश कर रहा हूं। मैंने कोशिश की

घड़ी -t -n 10 "(दिनांक '+ समय:% H:% M:% S'; ps aux | grep" पैटर्न "wc -l)" >> logfile

और जैसे परिणाम की उम्मीद कर रहा हूँ

TIME: 10:32:30    12
TIME: 10:32:40    18
TIME: 10:32:50    2

लॉगफ़ाइल में संग्रहीत किया जाना है। हालाँकि, जब लॉगफ़ाइल में अनपेक्षित वर्ण हैं। मैं कमांड ली से इस प्रकार का आउटपुट कैसे प्राप्त कर सकता हूं

जवाबों:


20

आप जो खोज रहे हैं उसे करने के लिए, एक साधारण स्क्रिप्ट (जैसा कि @Ignacio ने बताया है) को चाल चलनी चाहिए:

while true
do
    echo "$(date '+TIME:%H:%M:%S') $(ps aux | grep "pattern" | wc -l)" | tee -a logfile
    sleep 2
done

मैं teeइसके बजाय उपयोग करता हूं >>ताकि आप अपने टर्मिनल पर आउटपुट देख सकें और साथ ही इसे अपने लॉग में कैप्चर कर सकें।


मुझे लगता है कि पहली पंक्ति में 1 के साथ त्रुटि हो रही है। लेकिन जब मैंने इसे सच में बदल दिया, तो यह काम कर गया। हालाँकि स्क्रीन पर आउटपुट टाइम और काउंट को दो अलग-अलग लाइनों में दिखाता है, लेकिन लॉग फ़ाइल केवल गिनती को ही दिखाती है। क्या कोई ऐसा तरीका है जिससे मुझे टाइम मिल सकता है और लॉगफाइल में एक ही लाइन पर गिना जा सकता है?
लाउडकर

आह ठीक है, क्योंकि टी कमांड केवल चलाने के लिए है ps। मैं अपना उत्तर संशोधित करूंगा।
कर्क

अच्छी तरह से काम! धन्यवाद। क्या कोई तरीका है जिससे मैं टाइमस्टैम्प को लॉगफ़ाइल में जोड़ सकता हूं ताकि यह अद्वितीय फ़ाइलों में संग्रहीत हो जाए?
लाउडकर

आपका मतलब लॉगफाइल नाम से है? आप लॉगफाइल की तरह कुछ कर सकते हैं। हर दिन एक नया लॉगफाइल बनाने के लिए $ (तारीख +% वाई% एम% डी)।
कर्क

हां, मैंने ऐसा किया। इस प्रश्न के उत्तर के रूप में कोड संलग्न किया। धन्यवाद!
लाउडकर

37

यह आसानी से watchकिसी भी स्क्रिप्ट का उपयोग किए बिना भी किया जा सकता है ।

watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a logfile"


1
सही बात। मैंने लिखा था कि मेरे पास मैक पर क्या है, जहां घड़ी बॉक्स से बाहर उपलब्ध नहीं है, और पोर्टेबल समाधान का विकल्प चुना है। तुम्हारा बहुत सरल है।
Kir

2
दूसरे शब्दों में, पास किए गए arg के tee -a logfile भीतर एक पाइप शामिल करें watch। बहुत साफ है, धन्यवाद।
वाइल्डकार्ड

7

watchएक प्रदर्शन के लिए उत्पादन के लिए है। यदि आप बस हर एक्स सेकंड में एक कमांड चलाना चाहते हैं तो आपको बस उसके लिए एक देरी लूप का उपयोग करना चाहिए।

while true ; do somecommand ; sleep 2 ; done

5

वॉच एक ncurses प्रोग्राम है, और इसे एक कंसोल विंडो (रीडायरेक्ट नहीं) में चलाने के लिए डिज़ाइन किया गया है, यही कारण है कि यह अनपेक्षित वर्णों का एक गुच्छा बना रहा है (वे नियंत्रण वर्ण हैं जो स्क्रीन को फिर से खोलने के लिए कर्सर को प्रबंधित और स्थानांतरित करते हैं)।

आप किसी स्क्रिप्ट में दिनांक / grep कमांड को स्थानांतरित करने का प्रयास कर सकते हैं, और फिर उस स्क्रिप्ट को क्रोनजोब से कॉल कर सकते हैं।


3

ठीक है, इसलिए मैंने इसे एक स्क्रिप्ट में रखा और निम्नलिखित कोड है:

#!/bin/sh
NOW=$(date '+%Y%m%d%H%M%S')
LOGFILE="log.$NOW"

while true
do
    echo $(date '+[TIME: %H:%M:%S]   Output: ' ; ps aux | grep "pattern" | wc -l ) | tee -a $LOGFILE
    sleep 2
done

0

जब मैं बेहतर / लॉग इन आउटपुट प्राप्त करने की कोशिश कर रहा था तो मुझे यह सवाल आया du -sh $data_path। मैंने यहां "कमांड, डू स्लीप" पैटर्न का इस्तेमाल किया, लेकिन कुछ जटिल AWK का इस्तेमाल किया, जो मुझे चाहिए था।

while du -sh $data_path; do sleep 1; done | awk '
$1 != size {
    size=$1;
    path=$2;
    time=systime();
    seconds=time-prevtime;
    if(seconds < 1000000000){
        seconds=seconds" seconds"
    }else{
        seconds=""
    }
    print size, path, strftime("%m/%d/%Y@%H:%M:%S", time), seconds; 
    prevtime=time
}'

मैंने वास्तव में एक ऑनलाइनर के रूप में किया था, यही कारण है कि अर्धविराम हैं। लेकिन इसे पठनीय बनाने के लिए, मैंने इसे तोड़ दिया। आउटपुट जैसा दिखता है:

502G /var/lib/cassandra/dump/ 05/22/2018@04:46:17
503G /var/lib/cassandra/dump/ 05/22/2018@04:46:59 42 seconds
504G /var/lib/cassandra/dump/ 05/22/2018@04:47:57 58 seconds
505G /var/lib/cassandra/dump/ 05/22/2018@04:48:55 58 seconds
506G /var/lib/cassandra/dump/ 05/22/2018@04:49:53 58 seconds
507G /var/lib/cassandra/dump/ 05/22/2018@04:50:50 57 seconds
508G /var/lib/cassandra/dump/ 05/22/2018@04:51:46 56 seconds
509G /var/lib/cassandra/dump/ 05/22/2018@04:52:44 58 seconds
510G /var/lib/cassandra/dump/ 05/22/2018@04:53:41 57 seconds

0

यहाँ एक उदाहरण मैं सिर्फ एक के लिए आवश्यक है watchएक पर ps axfपूरे उत्पादन के तल पर एक टाइमस्टैम्प के साथ। मैं देख रहा हूं कि कब अपाचे विफल हो जाए। मुझे teeप्रत्येक कमांड के लिए पाइप करना था , psऔर date

watch 'ps axf | grep --line-buffered "[a]pache2"| tee --append logfile-apache-issue.log; date '+TIME:%H:%M:%S' | tee --append logfile-apache-issue.log'

tail --follow logfile-apache-issue.logपरिणामी फ़ाइल पर नमूना आउटपुट ।

29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:13
13622 ?        SN     0:33      \_ /usr/sbin/apache2 -k start
25038 ?        Ss     0:01      \_ /usr/sbin/apache2 -k start
29859 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29860 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29861 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:15
13622 ?        SN     0:33      \_ /usr/sbin/apache2 -k start
25038 ?        Ss     0:01      \_ /usr/sbin/apache2 -k start
29859 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29860 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29861 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.