วิธีที่ดีในการเปรียบเทียบเวลา


10

ฉันต้องตรวจสอบเวลาปัจจุบันและยกเลิกสคริปต์หากไม่ใช่เวลาที่เหมาะสมของวันที่ฉันควรจะรัน นอกจากนี้หากใครก็ตามที่ทำงานมันควรยกเลิก

ตัวอย่างเช่น: ฉันต้องการสคริปต์ของฉันให้ทำงานเฉพาะเมื่อเริ่มต้นระหว่าง 22.00 น. ถึง 2.00 น. (หน้าต่าง 4 ชั่วโมง)

ขณะนี้ฉันกำลังทำต่อไปนี้ สละเวลากับdate +%k%Mและเปรียบเทียบกับหมายเลขที่เข้ารหัสยาก

#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

ฉันต้องการที่จะรู้ว่ามีวิธีการที่มีประสิทธิภาพอื่น ๆ ที่เกี่ยวข้องกับการเปรียบเทียบเวลาในshหรือbashไม่?


1
หากคุณจำเป็นต้องเปรียบเทียบสองวันพยายามที่จะแปลงให้ MJD หรือ UNIX date +%sเวลาตัวอย่างเช่น:
Eddy_Em

1
@ Eddy ไม่ไม่ใช่วันที่, เป็นเวลาที่ฉันต้องเปรียบเทียบ
mtk

1
ฉันคิดว่าภายในไม่กี่วินาทีมันจะดีกว่า: currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
Eddy_Em

ทำไมไม่ใส่สคริปต์ลงใน crontab? ด้วยวิธีนี้คุณมั่นใจได้ว่ามันจะทำงานในเวลาที่กำหนด
BitsOfNix

1
เนื่องจากผู้ใช้สามารถเปลี่ยนเวลาสำหรับกระบวนการด้วยfaketimeสคริปต์ของคุณไม่ปลอดภัย การใช้ล็อกไฟล์อาจเป็นตัวเลือกที่ดีกว่า
jofel

คำตอบ:


6

นั่นดูสมบูรณ์แบบสำหรับฉัน อะไรที่ทำให้คุณคิดว่าควรปรับปรุง

อย่างไรก็ตามวิธีการปรับปรุงอาจเป็น:

  • ใช้กระสุนที่เล็กกว่าและเร็วกว่าทุบตีอย่าง dash หรือ pdksh
  • ใช้เปลือกที่มีความสามารถวันที่ในตัวเช่นzshหรือksh93
  • ใช้gawk(ซึ่งมีขนาดเล็กกว่าทุบตี แต่ไม่เกินขีด แต่สามารถหลีกเลี่ยงการแยกพิเศษ):

ตัวอย่าง:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

โอเคดี. แค่อยากจะยืนยันว่าสิ่งที่ฉันทำไม่ได้เลวร้ายหรือชั่วร้าย ขอบคุณสำหรับคำแนะนำ
mtk

4

dateutilsหากเครื่องมือภายนอกได้รับอนุญาตคุณอาจต้องการตรวจสอบ

"สคริปต์" ของคุณจะกลายเป็น:

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

คำเตือน: ฉันเป็นผู้เขียนเครื่องมือดังกล่าว

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