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

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

15 August 2022

ในบทความก่อนหน้านี้ เราได้ลองตั้งเวลาทำงานของ 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 Icon

We use cookies to optimize your browsing experience and improve our website’s performance. Learn more at our Privacy Policy and adjust your cookie settings at Settings

Privacy Preferences

You can choose your cookie settings by turning on/off each type of cookie as needed, except for necessary cookies.

Accept all
Manage Consent Preferences
  • Strictly Necessary Cookies
    Always Active

    This type of cookie is essential for providing services on the website of the Personal Data Protection Committee Office, allowing you to access various parts of the site. It also helps remember information you have previously provided through the website. Disabling this type of cookie will result in your inability to use key services of the Personal Data Protection Committee Office that require cookies to function.
    Cookies Details

  • Performance Cookies

    This type of cookie helps the Big Data Institute (Public Organization) understand user interactions with its website services, including which pages or areas of the site are most popular, as well as analyze other related data. The Big Data Institute (Public Organization) also uses this information to improve website performance and gain a better understanding of user behavior. Although the data collected by these cookies is non-identifiable and used solely for statistical analysis, disabling them will prevent the Big Data Institute (Public Organization) from knowing the number of website visitors and from evaluating the quality of its services.

  • Functional Cookies

    This type of cookie enables the Big Data Institute (Public Organization)’s website to remember the choices you have made and deliver enhanced features and content tailored to your usage. For example, it can remember your username or changes you have made to font sizes or other customizable settings on the page. Disabling these cookies may result in the website not functioning properly.

  • Targeting Cookies

    "This type of cookie helps the Big Data Institute (Public Organization) understand user interactions with its website services, including which pages or areas of the site are most popular, as well as analyze other related data. The Big Data Institute (Public Organization) also uses this information to improve website performance and gain a better understanding of user behavior. Although the data collected by these cookies is non-identifiable and used solely for statistical analysis, disabling them will prevent the Big Data Institute (Public Organization) from knowing the number of website visitors and from evaluating the quality of its services.

Save settings
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.