ในบทความก่อนหน้านี้ เราได้ลองตั้งเวลาทำงานของ Python Script บน Linux ด้วยเครื่องมือที่ชื่อว่า CRON สำหรับเพื่อน ๆ ที่สนใจสามารถติดตามอ่านได้ที่ https://bigdata.go.th/big-data-101/scheduling-cron/

เพื่อน ๆ บางคนอาจสงสัยว่า แล้วหาก ระบบปฏิบัติการ (Operating System: OS) ที่ใช้อยู่เป็น Windows ล่ะ จะสามารถตั้งเวลาบ้างได้ไหมและทำได้อย่างไร ในบทความนี้ เราจะมาลองตั้งเวลาการทำงานของ Python Script บน Windows กันค่ะ

Task Scheduler

โปรแกรมที่เราจะใช้ในการตั้งเวลาการทำงานของ Python Script ภายใน Windows นั้น มีชื่อว่า Task Scheduler ซึ่งเป็นโปรแกรมที่มาพร้อมกับ Windows อยู่แล้วและสามารถใช้สำหรับตั้งเวลาการทำงานต่าง ๆ คล้ายคลึงกับ Cron ใน Linux

เราสามารถเข้าถึงโปรแกรม Task Scheduler ได้ผ่านทาง Start Menu โดยการกดปุ่ม Windows แล้วพิมพ์คำว่า “Task Scheduler” จากนั้นคลิกเพื่อเลือกเปิดโปรแกรมดังกล่าว

โปรแกรม Task Scheduler

เมื่อเข้ามาภายในตัวโปรแกรม หากไปที่ Task Scheduler Library จะพบกับงานต่าง ๆ ที่ถูกกำหนดเวลาการทำงานไว้ พร้อมทั้งสถานะ เวลาการทำงานครั้งล่าสุด และเวลาการทำงานครั้งถัดไป ดังเช่นตัวอย่างในรูปด้านล่าง

ในเนื้อหาส่วนถัดไป เราจะทำการจัดเตรียม Python Script และมาทดลองตั้งเวลาผ่านโปรแกรม Task Scheduler นี้กันดูค่ะ

LAB Outline

             1 จัดเตรียม Python Script

             2 จัดเตรียม Batch file สำหรับสั่ง run Python Script ดังกล่าว

             3 ตั้งเวลาการทำงานผ่านโปรแกรม Task Scheduler

             **หมายเหตุ ในการทำการทดลองนี้ ต้องมีการติดตั้ง Python เรียบร้อยแล้วภายในเครื่อง

1 จัดเตรียม Python Script

ในการจัดเตรียม python script ให้เพื่อน ๆ ทำการสร้างโฟล์เดอร์สำหรับการทดลองนี้ที่ D:\task_scheduler จากนั้นสร้างไฟล์ Python Script ที่ชื่อว่า hello_script.py และทำการคัดลอกตัวอย่างโค้ดด้านล่าง

from datetime import datetime

filename = f"D:\\task_scheduler\\Hello_{datetime.now().strftime('%Y_%m_%d_%H%M%S')}.log"
with open(filename, "w") as f:
	f.write("Hello Task Scheduler\n")
	f.write(f"Job Done @{datetime.now().strftime('%Y_%m_%d_%H:%M:%S')}")

hello_script.py

สำหรับ python script ตัวอย่างนี้ เมื่อถูกสั่งรันจะทำการเขียนข้อความว่า

Hello Task Scheduler
Job Done @YYYY_MM_DD_hh:mm:ss

ลงไปในไฟล์ที่ชื่อว่า Hello_YYYY_MM_DD_hhmmss.log ภายในโฟลเดอร์ D:\task_scheduler โดยที่ YYYYMMDDhhmmss แทน ปีเดือนวันชั่วโมงนาทีและวินาทีที่คำสั่งทำงาน

เพื่อน ๆ สามารถทดลองสั่งรัน python script นี้ผ่าน terminal (เช่น Command Prompt หรือ PowerShell) ได้โดยใช้คำสั่ง python hello_script.py ซึ่งเมื่อทำงานสำเร็จจะพบไฟล์ Log และเมื่อเปิดดูจะพบเนื้อหาดังเช่นตัวอย่างในรูปด้านล่าง

ตัวอย่างผลการทำงานของ python script

2 จัดเตรียม Batch file สำหรับสั่ง run Python Script ดังกล่าว

ในขั้นตอนนี้เราจะสร้าง batch file สำหรับสั่งการทำงาน Python Script ที่ได้จัดเตรียมในขั้นตอนที่ผ่านมา โดยภายในต้องระบุ Path ไปยัง python.exe และ Path ไปยัง Python Script file

2.1 Path ไปยัง python.exe

โดยปกติแล้ว python.exe จะอยู่ใน location ดังเช่นในรูปด้านล่าง หรือสามารถทำการค้นหาโดยพิมพ์คำสั่ง where python ภายใน Command Prompt

ตัวอย่างการหา Path ของ Python.exe โดยใช้คำสั่ง where

2.2 Path ไปยัง Python Script

เราสามารถดู location ไปยังโฟล์เดอร์ที่จัดเก็บ Python Script ได้จาก Address Bar ของ File Explorer ดังเช่นในรูปด้านล่าง เพื่อนำมาประกอบกับชื่อไฟล์เป็น Path ไปยัง Python Script  เช่นกรณีนี้จะเป็น “D:\task_scheduler\hello_script.py”

ตัวอย่างการหา Path ของ File ผ่าน address bar ของ File Explorer

2.3 สร้าง batch file ชื่อ run_hello_script.bat

เมื่อเรารู้ path ของทั้งสองอย่างแล้ว เราสามารถทำการสร้าง batch file[2] ได้ โดยใช้โปรแกรม text editor ทั่วไป อาทิ notepad โดยตั้งชื่อไฟล์ที่มีนามสกุล .bat และระบุเนื้อหาเป็น “<python.exe path>” “<python script path>” ดังเช่นตัวอย่างด้านล่าง

"C:\Users\NJNONREASON\AppData\Local\Programs\Python\Python39\python.exe" "D:\task_scheduler\hello_script.py"

run_hello_script.bat

หากทดลองดับเบิ้ลคลิก run_hello_script.bat เพื่อสั่งการ python script จะเห็นว่ามี log file ใหม่เพิ่มขึ้นมา

ตัวอย่าง batch file และ log file ที่ได้จากการดับเบิ้ลคลิกสั่งการ ณ เวลา 14.24

3 ตั้งเวลาการทำงานผ่านโปรแกรม Task Scheduler

ในขั้นตอนนี้ เราจะทำการตั้งเวลาการทำงานของ Batch File ที่ได้มาจากขั้นตอนที่แล้ว ผ่านโปรแกรม Task Scheduler กันค่ะ

3.1 วิธีการสร้าง Basic Task เพื่อสั่งการทำงาน Batch Script ตามรอบเวลาที่กำหนด

1) เปิดโปรแกรม Task Scheduler และคลิกเลือกเมนู Create Basic Task…
2) ทำการระบุชื่องาน (Name) และรายละเอียดของงาน (Description) ที่จะสร้าง
3) เลือกระบุรอบการทำงาน เช่น ทุกวัน (Daily) ทุกสัปดาห์ (Weekly) ทุกเดือน (Monthly) หรือเพียงครั้งเดียว (One time)

ทั้งนี้หากต้องการระบุรอบการทำงานรูปแบบอื่นที่ไม่ได้มีในตัวเลือก เช่น ทุก 10 นาที หรือ ทุกชั่วโมง เราจะสามารถตั้งค่าเพิ่มเติมได้ภายหลังค่ะ ให้ทำการเลือกตัวเลือกใด ๆ ไปก่อนได้

4) ทำการระบุวันที่และเวลา ที่ต้องการให้ Script เริ่มทำงาน

เช่น ในตัวอย่างเป็นการระบุให้ script เริ่มทำงาน วันที่ 27 เดือนมิถุนายน 2022 เวลา บ่าย 3 โมง 25 นาที 21 วินาที

5) จากนั้นระบุประเภทของงาน ซึ่งในที่นี้เราต้องการสั่งเริ่มการทำงานของ Batch Script จึงเลือก Start a program
6) และทำการ Browse… เพื่อเลือก Batch File Script ที่เราได้สร้างก่อนหน้านี้
7) ตรวจสอบความเรียบร้อยของ Task ที่เราจะสร้าง จากนั้นกดปุ่ม Finish
8) จะเห็นว่ามีงานที่เราได้สร้างเมื่อสักครู่ภายใน Task Scheduler Library เป็นที่เรียบร้อย

3.2 วิธีการทดสอบสั่ง Run Task manually

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

รูปด้านล่างแสดงตัวอย่างของ Log file ที่เกิดขึ้นจากการสั่ง Run Task manually ณ เวลา 15:16 ซึ่งช่วยทำให้มั่นใจว่าเมื่อถึงเวลาการทำงานที่เรากำหนดไว้ Task ของเราจะสามารถทำงานได้อย่างถูกต้อง

Log file ที่เกิดขึ้นจากการ Run Task manually ณ เวลา 15:16

3.3 วิธีการระบุรอบเวลาการทำงานรูปแบบอื่น ๆ

หากยังจำกันได้ ในขั้นตอนการสร้างงานแบบ Create Basic Task นั้น เราจะสามารถกำหนดรอบการทำงานในรูปแบบที่จำกัด เช่น รายวัน รายสัปดาห์ หรือรายเดือน เป็นต้น แต่เราสามารถกำหนดรูปแบบรอบการทำงานที่แตกต่างไป ได้โดย . . .

1) เลือก Task ที่ต้องการ คลิกขวา และเลือก Properties
2) ไปยังแถบเมนู Triggers และกดปุ่ม Edit…
3) ภายในหน้าจอ Edit Trigger เราสามารถตั้งค่ารูปแบบรอบการทำงานอื่น ๆ ได้ที่ Advanced settings จากนั้นกดปุ่ม OK

เช่น ในตัวอย่างด้านล่างเป็นการกำหนดรูปแบบการทำงาน ให้เริ่มต้นวันที่ 27 มิถุนายน 2022 เวลา 3:25:00 โดยจะสั่งการทำงานทุก ๆ 5 นาที เป็นเวลา 1 ชั่วโมง

4) เมื่อกลับมายังหน้า Task Scheduler Library จะเห็นว่ารอบการทำงานของ Task เราได้เปลี่ยนไปตามรูปแบบใหม่ที่เราเพิ่งกำหนด
5) หลังจากปล่อยเวลาให้ผ่านรอบการทำงานไปและกลับมาดูที่โฟลเดอร์ D:\task_scheduler จะเห็นว่า Task ของเราได้ทำงานและสร้าง log file ตามที่เราได้วางแผนไว้
ตัวอย่าง log file ที่ได้จากการกำหนดรอบการทำงานทุก 5 นาที

บทสรุป

ในบทความนี้ เราได้ทดลองตั้งเวลาการทำงานของ Python Script บน Windows ผ่านการสร้าง Batch Script และกำหนดเวลาการทำงานผ่านโปรแกรม Task Scheduler หวังว่าบทความนี้จะเป็นประโยชน์ต่อเพื่อน ๆ ในการช่วยเพิ่มไอเดียการทำงานหรือทำให้วันเวลาที่ต้องสั่งรัน Python Script ซ้ำ ๆ สะดวกมากขึ้นนะคะ

นอกจากการสั่งการทำงานของ Python Script แล้ว เพื่อน ๆ ที่สนใจสามารถต่อยอดศึกษาการเขียน Batch Script เพื่อสั่งการทำงานอื่น ๆ เช่น โปรแกรมภาษาอื่น ๆ หรือการจัดการไฟล์ออกจากโฟล์เดอร์ต่าง ๆ โดยอัตโนมัติได้อีกด้วยค่ะ

เนื้อหาโดย ณัฐพัชร์ เศรษฐเสถียร

ตรวจทานและปรับปรุงโดย นนทวิทย์ ชีวเรืองโรจน์

อ้างอิง

https://datatofish.com/python-script-windows-scheduler/

https://www.tutorialspoint.com/batch_script/batch_script_overview.htm

Recommended Posts