ข้ามไปที่เนื้อหาหลัก

Crontab on Linux

Crontab เป็นคำสั่งในระบบ Unix/Linux เพื่อใช้ในการรัน Program หรือ Script ตามเวลาที่กำหนด จะคล้ายกับเจ้า Scheduled Tasks ในระบบปฏิบัติการ Windows


เรามาดูรายละเอียดต่างๆกันดีกว่า


การใช้งาน crontab


     คำสั่งและ option ต่างๆ ของ contrab
$crontab filename      เป็นการนำคำสั่งของ crontab เข้ามาจาก filename
$crontab -e              การแก้ไข crontab ปัจจุบันของ user ที่ login ปัจจุบัน
$crontab -l               ดูคำสั่ง crontab ทั้งหมดที่มีอยู่ ของ User
$crontab -r                     ลบคำสั่ง crontab ของ User 
$crontab -u user             เป็นคำสั่งของผู้ดูแลระบบ(root) เท่านั้น ใช้ ดู แก้ไข ลบ crontab ของ user แต่ล่ะคน 



การใช้คำสั่ง $crontab -e เพื่อการแก้ไข crontab
หลังจากรันคำสั่ง $crontab -e แล้วจะปรากฏหน้า editor ขึ้นมาเพื่อแก้ไข crontab การแก้ไข crontab จะมีลักษณะการใช้งานคล้ายกับโปรแกรม vi โดยมีโหมดและคำสั่งต่างๆดังนี้


โหมดการทำงาน และคำสั่งในการแก้ไข crontab 
    Esc       เพื่อออกมาสู่โหมดปกติ

    i           โหมดการแก้ไขข้อความ เพื่อการเพิ่ม ลบ เปลี่ยนแปล คำสั่ง ข้อความ ต่างๆ 
    x          ลบตัวอักษรที่ cursor วางอยู่ ทีละอักษร ในโหมดปกติ

    dd        ลบบรรทัด ทั้งบรรทัด ที่ cursor วางอยู่ทีละแถว ในโหมดปกติ

   :q!        ออกโดยไม่ต้องบันทึกการเปลี่ยนแปลงต่างๆใน crontab

   :wq!      บันทึกการแก้ไขข้อความที่ถูกแก้ไขใน crontab แล้วออกจากโปรแกรม 
คำสั่งดังกล่าวข้างต้นเป็นเพียงตัวอย่างคำสั่ง สามารถดูรายละเอียดเพิ่มเติม การใช้งาน vi หรือดู manual ได้จากคำสั่ง $man vi 


format ของ crontab 
minute(s) hour(s) day(s) month(s) weekday(s) command(s) 
format ของ crontab จะประกอบด้วยสองส่วนหลักๆ คือ การกำหนดวันเวลาในการรันโปรแกรม หรือscript


Field                        มีค่า          รายละเอียด
################################################################

minute                     0-59          เวลาเป็นนาที จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง (*) จะรันคำสั่งทุกๆนาที

hour                        0-23          เวลาเป็นชั่วโมง จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง 
(*) จะรันคำสั่งทุกๆ ชั่วโมง

day                          1-31          เวลาเป็นวัน จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง 
(*) จะรันคำสั่งทุกๆ วัน

month                      1-12          เวลาเป็นเดือน จะสั่งให้คำสั่งที่กำหนดทำงานทันทีเมื่อถึง 
(*) จะรันคำสั่งทุกๆ เดือน

weekday                  0-6            วันของแต่ละสัปดาห์ มีค่าดังนี้ (อาทิตย์ = 0, จันทร์ = 1, อังคาร = 2, พุธ = 3, พฤหัส = 4, ศุกร์ = 5 และ เสาร์ = 6)
(*) จะรันคำสั่งทุกๆ วันในสัปดาห์

command                 คำสั่ง          สามารถกำหนดได้ว่าจะเป็นการรันคำสั่งโดยตรงหรือ ให้เรียก shell script ต่างๆ
###############################################################
 ตัวอย่าง crontab
เพิ่ม crontab โดยการใช้คำสั่ง crontab -e เมื่อเข้าสู่หน้าจอ editor จากนั้น กด i เพื่อแก้ไขข้อความ หลังจากแก้ไขข้อความเรียบร้อยแล้ว บันทึกการแก้ไขและออกจากการแก้ไข crontab
0 8 * * * ls -l / >/list.txt
 อธิบาย จากคำสังข้างบนเป็นการสั่งให้รัน commant ls -l / >/list.txt ในเวลา 8.00 ของทุกๆวัน
0 8 * * 1 ls -l / >/list.txt
  อธิบาย จากคำสังข้างบนเป็นการสั่งให้รัน commant ls -l / >/list.txt ในทุกวันจันทร์ เวลา 8.00 ของทุกเดือน


0 8 * * 1,3,5 ls -l / >/list.txt
  อธิบาย จากคำสังข้างบนเป็นการสั่งให้รัน commant ls -l / >/list.txt ในทุกวันจันทร์ พุธ และศุกร์ เวลา 8.00 ของทุกเดือน

วิธีการดู manual ของคำสั่งต่างๆ
man crontab

man cron
อันนี้เป็นตัวอย่างที่ผมได้นำมาใช้งานจริง 
เป็น backup MySQL Database Server 
โดยคำสั่งในการ Backup ฐานข้อมูลคือ  
 $mysqldump -h HOST -u USER -pPASSWORD DATABASE TABLE
|
gzip > /tmp/table.`date +"\%Y-\%m-\%d"`.gz 
คำสั่งข้างบนเป็นรูปแบบที่ผมใช้ จะขออธิบายค่าต่างๆที่ต้องระบุ เพื่อใช้ในการ backup


HOST คือ Database Server อาจจะระบุเป็น IP หรือ Domain Name Sever
USER คือ ชื่อผู้ใช้ในการเข้าใช้งานฐานข้อมูล SQL Server
PASSWORD คือ รหัสผ่านสำหรับ User
DATABASE คือ ชื่อฐานข้อมูล
TABLE คือ ชื่อตาราง
/tmp/table.`date +"\%Y-\%m-\%d"`.gz  คือการกำหนดชื่อไฟล์เช่น table2011-01-03.gz โดยเก็บไว้ที่ path /tmp


ตัวอย่างการแก้ไข crontab หลังจากใช้คำสั่ง crontab -e แล้วกด i 
0 0 * * * /usr/bin/mysqldump -h localhost -u root -pp@ssword --all-database | gzip > /var/backup/database_`date +\%Y-\%m-\%d`.sql.gz


จากนั้นกด :wq เพื่อบันทึกและออกจากโปรแกรม
อธิบาย จากตัวอย่างเป็นการ backup ทุกฐานข้อมูลใน Database Server ในเวลา 24.00 ของทุกวันโดยตั้งชื่อไฟล์ต่างๆตามวันที่รันคำสั่ง

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

วิธีการดึง Record สุดท้ายของการบันทึกในฐานข้อมูลอ้างอิงจากตาราง

การทำงานกับข้อมูลที่มีการปรับปรุงตลอด และต้องทำการบันทึการเปลี่ยนแปลงไว้ด้วยโดยการอ้างอิงกับวันและเวลา เชื่อแน่นอนว่าจะต้องมีปัญหาเกี่ยวกับการดึงข้อมูลล่าสุดออกมาใช้งาน จึงเป็นเรื่องที่ทำให้เกิดเรื่องยุงยาก 

วันนี้จะขอเสนอแนวทางการใช้ SQL เพื่อดึงข้อมูล record สุดท้ายออกมา

แนวทางที่ 1
ให้เลือกข้อมูลโดยการเรียงลำดับจากมากไปน้อยก่อน จากนั้นใช้ฟังก์ชั่น limit เข้ามาช่วยในการตัดตััวที่เหลือออกไปเอาแค่ record แรกที่ผ่านการเรียงลำดับจากมากไปน้อยแล้วออกมา

เปลี่ยนขนาอของตัวอักษรใน Notepad++

เชื่อว่าหลายคนคงจะรู้จักโปรแกรมแก้ไขข้อความที่ชื่อว่า Notepad++
หากหน้าจะที่ใช้มีความละเอียดสูงเมื่อเปิดโปรแกรมมาแล้วจะทำให้รู้สึกว่าตัวอักษรมีขนาดเล็กเกินไป ทำให้ อ่านได้ยาก จึงต้องมีการปรับขนาดของตัวอักษรเพื่อสะดวกในการใช้งาน

วิธีการในการปรับขนาดของตัวอักษร


หรือจะใช้วิธีที่รวดเร็วว่า ก็คือ
การกด Ctrl ค้างไว้แล้วกด + หรือ -กด Ctrl แล้วหมุนเพื่อ Zoom เข้า/ออก หรือจะวิธีการเลือกจาก option ของโปรแกรม

ลินุกซ์ การเพิ่มผู้ใช้ไปยังกรุ๊ป(Linux add user to group)

วิธีการเพิ่ม Linux User ไปยัง Group ในระบบปฏิบัติการลินุกซ์ คุณสามารถใช้คำสั่ง "useradd" หรือ "usermod" ในการเพิ่ม user ไปยัง Linux user group คำสั่ง "useradd" เป็นคำสั่งที่ใช้ในการสร้างหรือปรับปรุง(update) ข้อมูลเริ่มต้นของผู้ใช้ที่สร้างขึ้นใหม่คำสั่ง "usermod" เป็นคำสั่งที่ใช้ในการเปลี่ยนแปลงบัญชีผู้ใช้ 
ตัวอย่างในการใช้คำสั่งนี้ได้ดีและเป็นประโยชน์มากคือการ เพิ่ม user ไปยัง group ที่มีอยู่แล้ว
Group มีอยู่สองแบบคือ กลุ่มแรกเป็น primary user group และกลุ่มที่สองใช้สำหรับเรียก group อื่นๆที่ไม่ใช่ primary group เรียกว่า secondary group
ข้อมูลทั่วไปของผู้ใช้ทั้งหมดจะถูกเก็บอยู่ในไฟล์