Linux20

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 3-12-2555

ดูแลโดย WIBOON


Linux 20: การตั้งเวลาทำงาน


รายละเอียด

  1. โปรแกรม cron ใช้สำหรับตั้งเวลาการทำงานแฟ้มชุดคำสั่งที่เตรียมไว้โดยอัตโนมัติตามเวลาที่กำหนด และทำซ้ำตามรอบเวลา กำหนดได้ละเอียดที่สุดเป็น 1 นาที
  2. แฟ้ม /etc/crontab เก็บข้อมูลหลัก แล้วแยกเป็นคาบเวลาย่อยคือ
    รายชั่วโมง อยู่ที่ /etc/cron.hourly
    รายวัน อยู่ที่ /etc/cron.daily
    รายสัปดาห์ อยู่ที่ /etc/cron.weekly
    รายเดือน อยู่ที่ /etc/cron.monthly
    คาบเวลาอื่นๆตั้งค่าตามใจชอบ อยู่ที่ /etc/cron.d
  3. ข้อมูลในแฟ้มการตั้งค่าของ cron มีรูปแบบตัวอย่างว่า
    25 6 * * * roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily
    แยกเป็นว่า
    minutes hours day-of-month month day-of-week user command
    ตัวเลขแรกมีค่าระหว่าง 0-59 เป็นตัวเลขนาทีที่เริ่มทำงาน ถ้าเป็นเครื่องหมาย * เป็นการทำงานทุกนาที
    ตัวเลขที่ 2 มีค่าระหว่าง 0-23 เป็นตัวเลขชั่วโมงที่เริ่มทำงาน ถ้าเป็นเครื่องหมาย * เป็นการทำงานทุกชั่วโมง
    ตัวเลขที่ 3 มีค่าระหว่าง 1-31 เป็นตัวเลขวันที่เริ่มทำงาน ถ้าเป็นเครื่องหมาย * เป็นการทำงานทุกวัน
    ตัวเลขที่ 4 มีค่าระหว่าง 1-12 เป็นตัวเลขเดือนที่เริ่มทำงาน ถ้าเป็นเครื่องหมาย * เป็นการทำงานทุกเดือน
    ตัวเลขที่ 5 มีค่าระหว่าง 0-6 เป็นตัวเลขวันในสัปดาห์ที่เริ่มทำงาน ถ้าเป็นเครื่องหมาย * เป็นการทำงานทุกวัน
    ข้อความช่องที่ 6 คือการกำหนดให้ cron ทำงานด้วยสิทธิ์ของผู้ใช้ระดับใด
    ข้อความช่องที่ 7 คือคำสั่งโปรแกรมที่ต้องให้ไปทำงาน


ขั้นตอนตัวอย่างที่ใช้งานจริงในการตั้งเวลาตอนตีสี่ให้สำรองข้อมูล Joomla ไปเก็บไว้ที่เครื่อง 192.168.3.124

  1. ขั้นตอนนี้ต้องเข้าเป็น username root ด้วยคำสั่ง
    sudo su -
  2. ต้องสร้าง key ของ username root ที่จะเป็นผู้รัน cron ด้วย ดังนี้
    ssh-keygen -t dsa
    ssh-copy-id -i ~/.ssh/id_dsa.pub mama@192.168.3.124
    chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub
  3. สร้างแฟ้ม /etc/cron.d/cron-backup
    nano /etc/cron.d/cron-backup
    ใส่คำสั่งดังนี้
    0 4 * * * root sh /root/backup-joomla.sh
  4. แฟ้ม /root/mydaily.sh ด้วยคำสั่ง
    nano /root/backup-joomla.sh
    มีข้อมูลคำสั่งต่างๆที่ต้องการสั่งให้ทำงาน ดังนี้
    #!/bin/bash
    TODAY=$(date "+%Y%m%d%H%M")
    mysqldump -u mamamysql -pmamapass testdatabase > /root/testjoomla_${TODAY}.sql
    scp -i /root/.ssh/id_dsa /root/testjoomla_${TODAY}.sql mama@192.168.3.124:backup_testjoomla
    tar -zcp -f /root/testjoomla_${TODAY}.tgz -C /var/www/testjoomla .
    scp -i /root/.ssh/id_dsa /root/testjoomla_${TODAY}.tgz mama@192.168.3.124:backup_testjoomla
  5. เสร็จแล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง
    service cron restart
  6. ออกจาก sudo su ด้วยคำสั่ง
    exit


แนะนำตัวอย่างการตั้งเวลาให้ระบบทำงานทุกเที่ยงคืนสิบนาที

  1. สร้างแฟ้ม /etc/cron.d/mycron ด้วยคำสั่ง
    sudo nano /etc/cron.d/mycron
    มีข้อมูลว่า
    10 0 * * * root sh /root/mydaily.sh
  2. สร้างแฟ้ม /root/mydaily.sh ด้วยคำสั่ง
    sudo nano /root/mydaily.sh
    มีข้อมูลคำสั่งต่างๆที่ต้องการสั่งให้ทำงาน ดังนี้
    #!/bin/bash
    /usr/sbin/ntpdate pool.ntp.org

  3. เสร็จแล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง
    sudo service cron restart


หมายเหตุ แนะนำตัวอย่างการตั้งหลายเวลาแบบต่างๆ

  1. ทุกเวลา 6 ชั่วโมง กับอีก 30 นาที
    30 */6 * * * root sh /root/mycron/ubuntu-archive-mirrors.sh
  2. ทุกเวลา 4 ชั่วโมง กับอีก 50 นาที
    50 */4 * * * root sh /root/mycron/ubuntu-releases-mirrors.sh
  3. ทุกเวลาเที่ยงคืน กับอีก 22 นาที
    22 0 * * * root sh /root/mycron/mozilla-mirrors.sh