ตรวจสอบ running file ใน Shell script

คือ ก็ไม่รู้จริงๆ มันเรียกว่าอะไร ไอ้ไฟล์นี้ แต่คือมันทำหน้าที่ ไม่ให้ run process ซ้ำกรณี คิดว่า script เราทำงาน นานแหงๆ

คือโดยทั่วไป เราจะสั่ง touch (ไปแตะไฟล์ เพราะให้ modify time มันเป็นปัจจุบัน หรือ สร้างไฟล์ใหม่เลย กรณีไม่มี) ก่อนที่จะเริ่มทำงาน แล้วก็ ลบมันทิ้ง ตอนทำงานเสร็จแล้ว เช่น แบบนี้

#!/bin/bash

if [[ -f /tmp/process.running ]] ; then
    exit
fi
touch /tmp/process.running

# ----- PROCESS SCRIPT

rm /tmp/process.running

แต่มันก็มี กรณี มันทำงานไม่เสร็จ ดันเจอ exit code โดยที่ยังไปไม่ถึง rm เลย ทำให้ไฟล์ running นี่ ค้างไว้ซะงั้น แล้วก็ทำให้ไม่สามารถรันงานรอบต่อไปได้ จนกว่าจะมีคนไปลบไฟล์ running ทิ้ง

หลังจาก งมหาอยู่นานว่า แล้วเราจะตั้งเวลา ให้ไฟล์มันหมดอายุยังไงหว่า เช่น ยังไง process เราก็ทำงานไม่เกิน 30 นาทีอยู่แล้ว ถ้าไฟล์ที่ค้างเก่ากว่า 30 นาที ก็เหมือนว่า รอบที่แล้วมันทำงานไม่สำเร็จ ก็ให้มันเริ่มงานต่อได้เลย อะไรงี้

ปรากฏว่าไปเจอวิธีประหลาด คือ ให้ touch อีกไฟล์ โดยให้เวลาถอยไป 30 นาที แทน แล้วก็ค่อยเอามาเทียบว่า ไฟล์ที่เรามี เก่ากว่าไฟล์นี้รึเปล่า (ทำไมมันอ้อมโลก ยังไงไม่รู้) ดังตัวอย่างนี้

#!/bin/bash

touch -d '30 minutes ago' /tmp/process.limit

if [[ -f /tmp/process.running ]] && [[ /tmp/process.running -nt /tmp/process.limit ]] ; then
    exit
fi
touch /tmp/process.running

# ----- PROCESS SCRIPT

rm /tmp/process.running
0
รับทราบ
0
เยี่ยม
0
แย่
0
ตลก
0
รักเลย
0
โกรธ
Beta Version v22.7.0 : ขออภัยเว็บกำลังก่อสร้าง (อีกแล้ว) แต่คราวนี้กำลังสร้างจริงจังละ