วิธีเปิดใช้ Cron โดยอัตโนมัติใน WSL บน Windows 10 และ 11
เผยแพร่แล้ว: 2022-01-29Windows มีหลายวิธีในการทำงานอัตโนมัติ เครื่องมือที่พบบ่อยที่สุดคือ Windows Task Scheduler แต่ถ้าคุณใช้ Windows Subsystem for Linux (WSL) ก็ยังมี cron daemon ที่รันงานในเบื้องหลังสำหรับการติดตั้ง WSL ของคุณ
Cron ไม่ทำงานตามค่าเริ่มต้น
บน Windows 10 และ Windows 11 cron มาพร้อมกับสภาพแวดล้อม Linux เช่น Ubuntu ปัญหาคือ WSL ไม่เริ่ม cron โดยอัตโนมัติ หมายความว่างานอัตโนมัติของคุณจะไม่ถูกดำเนินการตามค่าเริ่มต้น
ในการแก้ไขปัญหานี้ คุณสามารถเริ่ม cron ด้วยตนเองทุกครั้งที่คุณเปิดบรรทัดคำสั่ง แต่การเริ่มเครื่องมือที่ควรทำงานอัตโนมัติด้วยตนเองนั้นเป็นจุดที่ขาดหายไป
โชคดีที่มีวิธีแก้ไขปัญหานี้ได้ง่ายๆ และต้องใช้ Task Scheduler
หากคุณไม่เคยใช้ cron ใน Linux เพื่อรันงาน ลองดูบทแนะนำก่อนหน้าของเราเกี่ยวกับวิธีกำหนดเวลางานบน Linux สำหรับจุดประสงค์ของเราที่นี่ เราจะถือว่าคุณได้สร้างงาน cron บางงานในการติดตั้ง WSL ของคุณแล้ว และคุณต้องการความช่วยเหลือเพื่อให้แน่ใจว่างานเหล่านั้นทำงานแทน cron พี่เลี้ยงเด็กตลอดเวลา
สำหรับบทช่วยสอนนี้ เราจะใช้ sudo service
เพื่อตรวจสอบและเริ่ม cron ซึ่งเป็นวิธีแนะนำในการหยุดและเริ่มบริการบน Ubuntu รุ่นใหม่ ซึ่งเป็นการแจกจ่าย WSL ที่ได้รับความนิยมมากที่สุด
นอกจากนี้ โปรดทราบว่าบทช่วยสอนนี้ถือว่าคุณมีสิทธิ์ของผู้ดูแลระบบในเวอร์ชัน WSL ของคุณ หากคุณเป็นผู้ใช้พีซีเพียงคนเดียวและเปิดใช้งาน WSL ด้วยตัวเอง แสดงว่าคุณมีสิทธิ์ของผู้ดูแลระบบ
เคล็ดลับ: ใช้งานได้ในระบบย่อย Windows สำหรับ Linux บน Windows 11 เช่นกัน ไม่ใช่แค่ใน Windows 10
ที่เกี่ยวข้อง: วิธีกำหนดเวลางานบน Linux: บทนำสู่ไฟล์ Crontab
เตรียมลินุกซ์
สิ่งแรกที่เราต้องทำคืออนุญาตให้คอมพิวเตอร์เริ่ม cron โดยไม่ต้องใช้รหัสผ่าน เมื่อคุณเริ่มบริการเช่น cron คุณจะใช้คำสั่ง sudo service cron start
แต่คำสั่งนั้นต้องใช้รหัสผ่าน ซึ่ง Windows จะไม่สามารถเข้าถึงได้เมื่อเริ่มทำงาน วิธีแก้ไขคือปิดข้อกำหนดสำหรับรหัสผ่านสำหรับคำสั่งนี้
ในการทำเช่นนั้น ให้เปิดหน้าต่างเทอร์มินัล WSL แล้วพิมพ์ sudo visudo
กด Enter บนแป้นพิมพ์ ป้อนรหัสผ่าน Linux แล้วกดปุ่ม Enter อีกครั้ง หากคุณใช้ Ubuntu ไฟล์นี้จะเปิดไฟล์ “sudoers” โดยใช้โปรแกรมแก้ไขข้อความบรรทัดคำสั่ง Nano ที่ใช้งานง่ายสำหรับผู้เริ่มต้น Sudoers เป็นไฟล์สำหรับผู้ดูแลระบบที่สามารถเปลี่ยนสิทธิ์และสิทธิ์การเข้าถึงสำหรับผู้ใช้
เพิ่มคำสั่งต่อไปนี้ที่ด้านล่างของไฟล์ sudoers จากนั้นกด Ctrl+o เพื่อบันทึก และ Ctrl+x เพื่อออกจากไฟล์
%sudo ALL=NOPASSWD: /usr/sbin/service cron start
คำสั่ง sudoers นี้บอกว่าผู้ใช้ที่มีสิทธิ์เพียงพอที่จะใช้คำสั่ง sudo (ซึ่งควรรวมถึงคุณด้วย) ไม่ต้องใช้รหัสผ่านเพื่อเรียกใช้คำสั่ง sudo service cron start
ซึ่งเริ่มต้น cron daemon
หลังจากที่คุณบันทึกไฟล์แล้ว คุณสามารถตรวจสอบได้ว่าคำสั่งนั้นทำงานของมันโดยพิมพ์ sudo service cron start
และคำสั่งควรเริ่ม cron โดยไม่ต้องถามรหัสผ่าน หากได้ผล ให้ปิด cron อีกครั้งเพื่อทดสอบว่างานที่เรากำลังสร้างในขั้นตอนต่อไปทำงานอย่างถูกต้องหรือไม่ ในการทำเช่นนั้น โปรดเรียกใช้ sudo service cron stop
ตั้งค่า Cron ใน Windows Task Scheduler
นั่นคือขั้นตอนที่หนึ่งของการเดินทางไปสู่ระบบอัตโนมัติของ cron ไปที่ส่วนที่ 2 ด้วย Task Scheduler แตะแป้น Windows บนแป้นพิมพ์ จากนั้นค้นหา "Task Scheduler" เปิดทางลัด "Task Scheduler"
เมื่อเริ่มต้นขึ้น ให้ดูที่ส่วน "การดำเนินการ" และเลือก "สร้างงานพื้นฐาน"
ซึ่งจะเปิดตัวช่วยสร้างงานพื้นฐาน ขั้นแรก มันจะขอให้คุณตั้งชื่องานและให้คำอธิบาย คุณสามารถป้อนสิ่งที่คุณต้องการได้ที่นี่ เราเรียกงานนี้ว่า "cron" และคำอธิบายคือ "งานที่จะเริ่มต้น cron เมื่อเริ่มต้นระบบ" ตอนนี้กด "ถัดไป"
ในส่วนต่อไปนี้เราจะลงไปสู่ธุรกิจ อันดับแรก Windows ต้องการทราบว่าเราต้องการเรียกใช้งานเมื่อใด เลือกปุ่มตัวเลือก "เมื่อคอมพิวเตอร์เริ่มทำงาน" แล้วคลิก "ถัดไป"
ในส่วนถัดไป เราต้องการ “เริ่มโปรแกรม” ตัวเลือกนั้นถูกเลือกไว้โดยค่าเริ่มต้น ดังนั้นคลิก “ถัดไป”
ตอนนี้ เราต้องระบุโปรแกรมที่เราต้องการเรียกใช้ ซึ่งก็คือ WSL ป้อนข้อมูลต่อไปนี้ลงในช่องป้อนข้อความ "Program/Script": C:\Windows\System32\wsl.exe
เราต้องเพิ่มข้อโต้แย้งด้วย เนื่องจากสิ่งที่เราทำจนถึงตอนนี้คือเริ่ม WSL แต่ภายใน WSL เราต้องบอกให้ Ubuntu เริ่ม cron ดังนั้น ในกล่อง "เพิ่มอาร์กิวเมนต์" ให้เพิ่ม: sudo /usr/sbin/service cron start
กด "ถัดไป" อีกครั้ง ทำเครื่องหมายในช่องที่ระบุว่า "เปิดกล่องโต้ตอบคุณสมบัติเมื่อฉันคลิกเสร็จสิ้น" จากนั้นคลิก "เสร็จสิ้น"
งานถูกสร้างขึ้น แต่เราต้องทำสิ่งสุดท้ายเพื่อให้แน่ใจว่าทุกอย่างใช้งานได้ หน้าต่างใหม่จะเปิดขึ้น ซึ่งจะแสดงข้อมูลสรุปของงานที่คุณสร้าง แต่จะถูกตั้งค่าให้ทำงานเมื่อคุณเข้าสู่ระบบเท่านั้น เราจำเป็นต้องเลือกปุ่มตัวเลือกที่ระบุว่า "เรียกใช้ไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่" จากนั้นกด "ตกลง"
ตอนนี้ มาทดสอบงานของเราในสองวิธี ขั้นแรก ในหน้าต่างหลักของ Task Scheduler ให้เลื่อนลงมาจนกว่าคุณจะเห็นชื่องานของคุณ หากคุณใช้ชื่อ "cron" ควรพบที่ด้านบนสุดของรายการ คลิกขวาที่งานและเลือก "เรียกใช้"
จากนั้นกลับไปที่เทอร์มินัล WSL ของคุณและพิมพ์ sudo service cron status
และควรบอกว่า cron กำลังทำงานอยู่ หากไม่เป็นเช่นนั้น ให้ตรวจสอบอีกครั้งว่าคุณป้อนทุกอย่างถูกต้องในขั้นตอนก่อนหน้านี้
หากทุกอย่างทำงานอย่างถูกต้องในการตรวจสอบครั้งแรก ก็ถึงเวลาสำหรับการทดสอบครั้งใหญ่ รีสตาร์ทพีซีของคุณและเมื่อคุณกลับมา เปิดเทอร์มินัล WSL และเรียกใช้ sudo service cron status
ซึ่งควรรายงานว่า cron กำลังทำงานอยู่
ยินดีด้วย! คุณได้ก้าวแรกสู่โลกอัตโนมัติที่ใหญ่ขึ้น เมื่อ cron ทำงานในพื้นหลัง cronjobs ที่คุณกำหนดค่าใน WSL จะทำงานตามกำหนดเวลาโดยอัตโนมัติ