bash: ลองทำ cron ตรวจ apt-proxy

 
แพกเกจ apt-proxy เป็นแพกเกจที่ใช้เป็นคลังเก็บแพกเกจที่เครือข่ายเราใช้ประจำ ใช้ง่ายและสะดวก แต่ชอบตายบ่อย จะเข้าไปรื้อดูการทำงาน ก็ยากเกินความสามารถ เลยลองเขียนเป็น cron แก้ปัญหาเฉพาะหน้าไปก่อน การทำงานของสคริปต์ก็ไม่มีอะไรมาก แค่ตรวจว่าการใช้คำสั่ง aptitude update นานเกิน 60 วินาทีหรือไม่ ถ้านานก็ให้เริ่ม apt-proxy ใหม่ แค่นี้เอง
(สามารถปรับช่วงเวลารอที่ตัวแปร TIME_WAIT ตามความเร็วของเน็ตที่มีอยู่จริง) # vi /usr/local/sbin/d.cron-check-apt-proxy
#!/bin/bash
TIME_WAIT='60'

function sub_wait() {
        sleep $TIME_WAIT 
        echo `date +%F-%R-%s`
}

function update_apt_proxy() {
        aptitude update
        echo `date +%F-%R-%s`
}

T1=`sub_wait` &
T2=`update_apt_proxy` &
wait
if [ "$T1" \< "$T2" ]; then
        echo "apt-proxy update longer than $TIME_WAIT seconds, restart apt-proxy." 
        /etc/init.d/apt-proxy restart
fi
# chmod 755 /usr/local/bin/d.cron-check-apt-proxy ตั้ง crontab ให้รันทุกชั่วโมง
# crontab -e
...
#CHECK apt-proxy EVERY 60 MIN
0 * * * *   /usr/local/sbin/d.cron-check-apt-proxy
...
เสร็จแล้ว ลองใช้ดูก่อน แล้วจะรายงานผลต่อไปตรับ update
  • เจอสาเหตุแล้ว มาจากตั้ง squid3 เป็นแบบ transparent ไว้ ทางแก้คือ ยกเลิก transparent หรือไม่ก็ปรับ apt-proxy ให้ไปใช้ http_proxy ที่พอร์ต 8080 (หรือพอร์ตอื่นที่ตั้งไว้ใน squid) เรียบร้อยแล้ว - แต่สคริปต์นี้ก็ยังน่าใช้อยู่ดี อาจปรับเป็นทุก 3 ชั่วโมงก็ได้