SCHEDULING 2: ตั้งเวลา run Python Script บน Windows ด้วย Task Scheduler กัน !

SCHEDULING 2: ตั้งเวลา run Python Script บน Windows ด้วย Task Scheduler กัน !

15 สิงหาคม 2565

ในบทความก่อนหน้านี้ เราได้ลองตั้งเวลาทำงานของ Python Script บน Linux ด้วยเครื่องมือที่ชื่อว่า CRON สำหรับเพื่อน ๆ ที่สนใจสามารถติดตามอ่านได้ที่ https://temp.bdi.or.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 Schedulern")
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_schedulerhello_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:UsersNJNONREASONAppDataLocalProgramsPythonPython39python.exe" "D:task_schedulerhello_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

แบ่งปันบทความ

กลุ่มเนื้อหา

แท็กยอดนิยม

แจ้งเรื่องที่อยากอ่าน

คุณสามารถแจ้งเรื่องที่อยากอ่านให้เราทราบได้ !
และเราจะนำไปพัฒนาบทความให้มีเนื้อหาที่น่าสนใจมากขึ้น

ไอคอน PDPA

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ “นโยบายคุ้กกี้” และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ “ตั้งค่า”

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่มีความจำเป็น (Strictly Necessary Cookies)
    เปิดใช้งานตลอด

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

  • คุกกี้เพื่อการวิเคราะห์และประเมินผลการใช้งาน (Performance Cookies)

    คุกกี้ประเภทนี้ช่วยให้ BDI ทราบถึงการปฏิสัมพันธ์ของผู้ใช้งานในการใช้บริการเว็บไซต์ของ BDI รวมถึงหน้าเพจหรือพื้นที่ใดของเว็บไซต์ที่ได้รับความนิยม ตลอดจนการวิเคราะห์ข้อมูลด้านอื่น ๆ BDI ยังใช้ข้อมูลนี้เพื่อการปรับปรุงการทำงานของเว็บไซต์ และเพื่อเข้าใจพฤติกรรมของผู้ใช้งานมากขึ้น ถึงแม้ว่า ข้อมูลที่คุกกี้นี้เก็บรวบรวมจะเป็นข้อมูลที่ไม่สามารถระบุตัวตนได้ และนำมาใช้วิเคราะห์ทางสถิติเท่านั้น การปิดการใช้งานคุกกี้ประเภทนี้จะส่งผลให้ BDI ไม่สามารถทราบปริมาณผู้เข้าเยี่ยมชมเว็บไซต์ และไม่สามารถประเมินคุณภาพการให้บริการได้

  • คุกกี้เพื่อการใช้งานเว็บไซต์ (Functional Cookies)

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

  • คุกกี้เพื่อการโฆษณาไปยังกลุ่มเป้าหมาย (Targeting Cookies)

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

บันทึกการตั้งค่า
ไซต์นี้ลงทะเบียนกับ wpml.org ในฐานะไซต์พัฒนา สลับไปยังไซต์การผลิตโดยใช้รหัส remove this banner.