เก็บเอาต์พุตของวันที่และดูคำสั่งไปยังไฟล์


23

ฉันเป็นมือใหม่ที่จะลินุกซ์และฉันพยายามที่จะดูคำสั่งและพยายามที่จะเข้าสู่ระบบไฟล์ ฉันเหนื่อย

watch -t -n 10 "(วันที่ + เวลา:% H:% M:% S '; ps aux | grep" pattern "| wc -l)" >> logfile

และฉันหวังว่าจะได้ผลลัพธ์เช่นนี้

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

ที่จะเก็บไว้ใน logfile อย่างไรก็ตามเมื่อ logfile มีอักขระที่ไม่สามารถพิมพ์ได้ฉันจะรับเอาต์พุตชนิดนี้จากคำสั่ง li ได้อย่างไร

คำตอบ:


19

เพื่อที่จะทำสิ่งที่คุณกำลังมองหาสคริปต์ง่ายๆ (ตามที่ @Ignacio ชี้ให้เห็น) ควรทำเคล็ดลับ:

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

ฉันใช้teeแทน>>เพื่อให้คุณสามารถดูผลลัพธ์ในเทอร์มินัลของคุณรวมทั้งจับมันในบันทึกของคุณ


ฉันดูเหมือนจะได้รับข้อผิดพลาดกับ 1 ในบรรทัดแรก แต่เมื่อฉันเปลี่ยนเป็นจริงมันใช้งานได้ อย่างไรก็ตามเอาต์พุตบนหน้าจอแสดงเวลาและนับบนสองบรรทัดที่แตกต่างกัน แต่ไฟล์บันทึกจะแสดงเฉพาะจำนวนเท่านั้น มีวิธีใดบ้างที่ฉันจะได้รับ Time และนับในบรรทัดเดียวกันใน logfile?
LoudKur

อ่าใช่แล้วเพราะคำสั่ง tee ใช้สำหรับpsเท่านั้น ฉันจะแก้ไขคำตอบของฉัน
Kirk

ทำงานได้อย่างสมบูรณ์แบบ! ขอบคุณ มีวิธีใดบ้างที่ฉันสามารถเพิ่มการประทับเวลาลงในล็อกไฟล์เพื่อให้ได้รับการจัดเก็บในไฟล์ที่ไม่ซ้ำกัน
LoudKur

คุณหมายถึงชื่อ logfile หรือไม่ คุณสามารถทำสิ่งต่าง ๆ เช่น logfile $ (วันที่ +% Y% m% d) เพื่อสร้างไฟล์บันทึกใหม่ทุกวัน
Kirk

ใช่ฉันทำอย่างนั้น แนบรหัสเป็นคำตอบสำหรับคำถามนี้ ขอบคุณ!
LoudKur

36

สิ่งนี้สามารถทำได้อย่างง่ายดายโดยใช้watchโดยไม่ต้องใช้สคริปต์ใด ๆ

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


1
แก้ไข. ฉันเขียนสิ่งที่ฉันมีบน Mac ซึ่งนาฬิกาไม่สามารถใช้งานได้นอกกรอบและเลือกใช้โซลูชันแบบพกพา ของคุณง่ายกว่ามาก
โบสถ์

2
ในคำอื่น ๆ รวมถึงท่อให้tee -a logfile ภายในwatchหาเรื่องที่ผ่านมา สะอาดมากขอบคุณ
Wildcard

7

watchมีความหมายสำหรับการส่งออกไปยังจอแสดงผล หากคุณต้องการเรียกใช้คำสั่งทุก ๆ X วินาทีคุณควรใช้การวนรอบหน่วงเวลาสำหรับสิ่งนั้น

while true ; do somecommand ; sleep 2 ; done

5

watch เป็นโปรแกรม ncurses และได้รับการออกแบบให้ทำงานในหน้าต่างคอนโซล (ไม่เปลี่ยนเส้นทาง) ซึ่งเป็นสาเหตุที่สร้างตัวอักษรที่ไม่สามารถพิมพ์ออกมาได้จำนวนมาก (นั่นคือตัวควบคุมที่จัดการและเลื่อนเคอร์เซอร์ไปรอบ ๆ

คุณอาจลองย้ายคำสั่ง date / grep ไปที่สคริปต์แล้วเรียกสคริปต์นั้นจาก cronjob


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

นี่คือตัวอย่างที่ฉันต้องการสำหรับ a watchบนps axfด้วยการประทับเวลาที่ด้านล่างของเอาต์พุตทั้งหมด ฉันกำลังดูเมื่อ Apache ล้มเหลว ผมต้องท่อteeสำหรับแต่ละคำสั่งการและpsdate

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.