การตั้งเวลาด้วย crontab

July 20th, 2009

การตั้งเวลาบน Linux สามารถทำได้โดยการใช้ crontab เข้ามาช่วยครับ มาดูวิธีและความหมายการใช้งานกันครับ

crontab คืออะไร
crontab เป็น simple text file ที่ประกอบด้วยรายการคำสั่งที่จะให้รันตามเวลาที่กำหนด โดยคำสั่งดังกล่าวจะสัมพันธ์กับเวลาในการรัน ที่ถูกควบคุมจาก cron daemon และถูก executed ใน system’s background ข้อมูลเพิ่มเติมเกี่ยวกับ crontab สามารถดูได้จาก crontab’s man page

crontab ทำงานอย่างไร
ระบบจะรักษา (maintain) crontab ของแต่ละ user ไว้ในระบบ การแก้ไขหรือสร้าง crontab คุณจะต้องใช้ text editor ที่ระบบได้กำหนดไว้แล้ว โดย nono text editor เป็น default text editor บนระบบ ubuntu ของผู้เีขียนที่ใช้ทดลอง ซึ่ง text editor ดังกล่าวนี้จะต้องเปิดขึ้นมาด้วยคำสั่ง crontab ที่ใช้ option เป็น -e (crontab -e) โดยการสร้าง crontab ให้ใ้ช้คำสั่งดังนี้ :

#crontab -e
เมื่อ ใช้คำสั่ง crontab -e ระบบจะเปิด nano text editor ขึ้นมาเป็น blank window เพื่อให้เราป้อนเวลาและคำสั่ง สำหรับการตั้งเวลาดังรูปข้างล่าง โดยแต่ละบรรทัดจะแทน separate crontab entry ที่รู้จักกันในชื่อ “cron job” ถ้าคุณไ่ม่คุ้นเคยกับ nono text editor คุณควรจะศึกษาข้อมูลเพิ่มเติมจากแหล่งข้อมูลนอกเหนือจากที่นี้

Crontab Sections
แต่ละ section จะถูกแยกโดยหนึ่งช่องว่าง (space) ซึ่งในส่วนของ section สุดท้าย (command section) จะมี space เป็น 1 space หรือมากกว่า ทั้งนี้จะไม่อนุญาตให้มี space มากกว่า 1 space ระหว่าง section 1-5 โดย section 1-5 จะถูกใช้เพื่อแสดงว่างาน (task) จะถูก executed เป็นเวลาบ่อยแค่ไหน โดยรูปแบบของ cron job จะเป็นดังนี้ :

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command

รุปแบบที่ 1
01 04 1 1 1 /usr/bin/somedirectory/somecommand
หมายถึงจะมีการรันคำสั่ง /usr/bin/somedirectory/somecommand ที่เวลา 4:01am ในวันที่ 1 ที่เป็นวันจันทร์ของเดือนมกราคม

เราสามารถใช้เครื่องหมาย * เพื่อแทนความหมาย “ทุก ๆ” (ทุกนาที, ทุกชั่วโมง,ทุกวัน, ทุกเดือน, ทุกวันของสัปดาห์)

รูปแบบที่ 2
01 04 * * * /usr/bin/somedirectory/somecommand
หมายถึงจะมีการรันคำสั่ง /usr/bin/somedirectory/somecommand ที่เวลา 4:01am ทุก ๆ วันของทุก ๆ เดือน

เรา สามารถใช้คอมม่า (,) เพื่อให้มีการรันกมากว่า 1 instance ของคำสั่งภายในช่วงเวลา และใช้เครื่องหมาย dash (-) เพื่อแทนคำสั่งที่ต่อเนื่องได้

รูปแบบที่ 3
01,31 04,05 1-15 1,6 * /usr/bin/somedirectory/somecommand
หมายถึงจะมีการรันคำสั่งที่นาทีที่ 1 และ 31 ถัดจากเวลา 4:00am และ 5:00am (4:01am, 4:31am, 5:01am, 5:31am) ในวันที่ 1-15 ของเดือนมกราคมและมิถุนายน

ข้อความ “/usr/bin/somedirectory/somecommand” จากที่กล่าวมาแสดงถึงงาน (task) ที่จะรัน ณ เวลาที่กำหนด ซึ่งมีการแนะนำว่าควรจะเป็น full path command ดังรูปแบบที่กล่าวมา โดย crontab จะเริ่มรันคำสั่งทันทีเมื่อการแ้ก้ไข (crontab -e) ถูกต้องและมีการบันทึกแล้ว

Crontab Options
crontab -l : แสดง crontab ที่มีอยู่
crontab -r : เป็นการลบ crontab ที่มีอยู่
crontab -e : เป็นการแก้ไข crontab ที่มีอยู่ ผ่าน editor ที่ถูกระบุไว้ใน environment variables ซึ่งในที่นี้เป็น nano editor
EDITOR=”vi” ; export EDITOR
crontab -e :
เป็นการแก้ไข crontab ที่มีอยู่ ผ่าน editor vi ที่ไม่อนุญาติให้สามารถเข้าไปแก้ไขได้โดยตรง ของ crontab -e

หลังจากที่ exit ออกจาก editor แล้ว crontab ที่เราแก้ไขจะุูถูกตรวจสอบความถูกต้องจากระบบ และถ้าไม่มีความผิดพลาด ก็จะถูกติดตั้งโดยอัตโนมัติ

Crontab Example

ตัวอย่างที่ 1
45 04 * * * /usr/sbin/chkrootkit && /usr/bin/updatedb
หมายถึงเป็นกำหนดให้ crontab มีการรัน updatedb ซึ่งจะเป็นการอัพเดต slocate database ทุก ๆ เช้าเวลา 4:45am วิธีการทำก็คือให้พิมพ์คำว่า crontab -e และพิมพ์ข้อความหนึ่งบรรทัดดังกล่าวใต้บรรทัิดต่อไปนี้ :
# m h dom mon dow command

แล้วให้บันทึกการแก้ไขและออกจาก editor

ถ้าเรากำหนด crontab ไม่ถูกต้องตามรูปแบบจะมีข้อความฟ้องดังตัวอย่างดังนี้ :
“/tmp/crontab.P7vQuf/crontab”:2: bad day-of-month
errors in crontab file, can’t install.
Do you want to retry the same edit?

เรา สามารถใช้ double-ampersand (&&) ในส่วนของ command section เพื่อรันคำสั่งหลาย ๆ คำสั่งที่ติดต่ีอกัน (consecutively) ได้

ตัวอย่างที่ 2
45 04 * * * /usr/sbin/chkrootkit && /usr/bin/updatedb
หมายถึงเป็นการรัน chkrootkit และ updatedb ทีุ่เวลา 4:45am ของทุกวัน

ตัวอย่างที่ 3
10 3 * * * /usr/bin/foo
หมายถึงเป็น /usr/bin/foo ที่เวลา 3:10pm ของทุกวันจันทร์

จบแล้วครับ เป็นไงมั้งครับสำหรับความหมายและการใช้งาน ถ้าติดปัญหาประการใด comment ถามมาได้เลยนะครับ ขอบคุณครับ

การเขียน PHP ให้ออกรายงาน เป็น MS Word

July 20th, 2009

เผื่อมีประโยชน์กับหลายๆคนครับรวมทั้งตัวผมด้วย ^^

ค้นพบ วิธีการเขียน PHP ให้ออกรายงาน เป็น MS Word โดยไม่ได้ใช้คำสั่ง COM
วิธีการไม่ซับซ้อน ไม่ต้องมีไฟล์เสริม จัดรูปแบบ(สี ขนาด ชนิดตัวอักษร) ได้ตามต้องการเท่าที่เครื่องคอมพิวเตอร์ ของผู้ใช้แสดงได้
ง่ายกว่า รายงานเป็น PDF อย่างเห็นได้ชัด
รู้แล้วจะร้อง ฮ้า ง่ายขนาดนั้นเชียว หรือ ???
ทดสอบแล้วว่าสามารถใช้งานได้จริง
ไม่ต้องส่งเงินมา \o/
***********************
เฉลย สร้าง PHP ไฟล์ กำหนดเพิ่ม 2 บันทัดข้างล่างนี้ ไว้ที่หัวไฟล์

<?
header(“Content-Type: application/msword”);
header(‘Content-Disposition: attachment; filename=”docsfile.doc”‘);
?>

แล้ว เอา HTML code ที่ต้องการ (จัดรูปแบบ ใส่ตาราง ใส่สี กำหนดตัวอักษร ตามชอบ)วางต่อ ข้างล่าง
แล้วเรียก ไฟล์ PHP ….. Work ครับ Work
ของแถมเทคนิค เสริมก็คือ นำไฟล์ หรือสร้างใหม่ หน้ารายงานเอกสารด้วย MS Word แล้ว save เป็น HTML
แล้ว ใช้ Web Editor เช่น Maromedia Dreamweaver ตกแต่งอีกเล็กน้อย
แก้ไข-เพิ่มเติม ส่วนของข้อมูลที่ได้มาจากการ query ลงไปในรายงานตามตำแหน่งที่สมควร
แนะนำให้ใช้ ตารางช่วยในการจัดรูปแบบเอกสาร และควรคล่อมทั้งเอกสารด้วยตารางกว้างขนาดประมาณ หน้าเอกสารที่ต้องการ
แบ่งเป็น 2 columns โดย column ซ้ายเป็น Left margin ของกระดาษ แล้วเอาตัวเอกสารไว้ column ขวา ไม่เช่นนั้น รายงานจะใหญ่ ตามหน้าจอ
สรุปก็คือ ใช้เอกสารช่วยจัดหน้ารายงานเหมือนที่ต้องทำให้ หน้าเว็บโดยทั่วไปครับ

ตัวอย่าง

<? // report1.php
header(‘Content-type: application/ms-word’);
header(‘Content-Disposition: attachment; filename=”filename.doc”‘);
?>
<html>
<head>
……………………….
</head>
<body’>
<center>
<table width=”800″ border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”10%”> <!– left margin //–></td>
<td width=”90%”>
<!– Queried Report //–>
.
</td>
</tr>
</table>
</center>
</body>
</html>

ผลข้างเคียง

ในการจัดรูปแบบเอกสาร ต้องใช้ตารางช่วย โดยต้องออกแบบใน Macromedia Dreamweaver MX 2004 หรือ HTML Editor ใด ๆ ที่มีลิขสิทธิถูกต้องเท่านั้ัน (มิฉะนั้น เอกสารที่ได้จะไม่สวยงาม หรืออยู่ในรูปแบบที่ต้องการ) และหากเอกสารมีรูปต้องแสดง path แบบเต็ม ๆ เท่านั้น

ขอบคุณสำหรับความรู้
ที่มาแหล่งความรู้จาก http://gotoknow.org/blog/myprogram/216997

ความรู้เรื่องหน้ากากอนามัย

July 17th, 2009

อินเทรนเลย อิอิ หลายคนเข้าใจผิดกันเกี่ยวกับหน้ากากอนามัย พอดีเพื่อนส่งข้อมูลมาให้อ่านครับเห็นว่ามีประโยชน์เลยเอามาแชร์กัน

ระยะนี้เรื่องไข้หวัดใหญ่สายพันธุ์ใหม่ 2009 กำลังเป็นที่สนใจของทุกท่าน การใช้หน้ากากอนามัยเมื่อเราไปอยู่ในที่ชุมนุมชนที่คิดว่ามีความเสี่ยง ก็เป็นอีกวิธีหนึ่งที่แพทย์แนะนำว่าจะปลอดภัยขึ้นจากการติดโรค หน้ากากอนามัยจะมี 2 ด้าน ด้านที่เป็นสีขาวจะเป็นด้านแผ่นกรอง วิธีใช้ที่ถูกต้องคือ

ถ้าเราเป็นหวัด ต้องคาดโดยเอาด้านสีขาวไว้ด้านใน (ด้านที่เป็นสีอยู่ด้านนอก) เพื่อกรองไม่ให้เชื้อไปติดผู้อื่น
ถ้าเราไม่ได้ป่วย ต้องคาดเอาด้านสีขาวไว้ด้านนอก เพื่อกันไม่ให้เชื้อโรคจากภายนอกมาติดเรา

ถ้าทราบอย่างนี้แล้วอย่าแอบคิดว่าจะเอาสีขาวออกด้านนอกตอนเป็นหวัดนะครับ สังคมจะอยู่ได้เราต้องช่วยกันคนละเล็กละน้อยนะครับ

เกร็ดเล็กน้อยของการใช้หน้ากากอนามัย
คลิกที่รูป เพื่อเอาโค้ดรูปนี้ไปแปะ

เศร้าเลยแล้วที่ใส่อยู่เนี่ยมันป้องกันได้หรือไม่ได้หว่า เชื่อมาอยู่ใกล้เป็นอยู่ดี Y_Y