วิธีใช้ launchd เพื่อเรียกใช้สคริปต์ตามกำหนดเวลาใน macOS

Admin

launchd เป็นเครื่องมือสำหรับการเริ่ม หยุด และจัดการสคริปต์และกระบวนการ หากคุณเคยทำงานกับ Linux เวอร์ชันใดก็ตาม คุณอาจคุ้นเคยกับ cron launchd นั้นเป็น cron ใน macOS

daemons คืออะไร?

launchd-scripts-maxwells-demon

Daemons (ออกเสียงว่า “ปีศาจ”) เป็นสคริปต์ที่ทำงานอยู่เบื้องหลัง ไม่เหมือนกับแอปพลิเคชัน daemons ทำงานเป็นกระบวนการและไม่ได้อยู่ภายใต้การควบคุมโดยตรงของผู้ใช้หรือแอปพลิเคชันอื่น บน macOS พวกเขาอยู่ภายใต้คำสั่งของกรอบงาน launchd ซึ่งจะตัดสินใจเมื่อเริ่มต้นและหยุด

ชื่อที่ไม่ธรรมดานั้นมาจาก อสูรของแม็กซ์เวลล์ตัวแทนจินตภาพที่จัดเรียงโมเลกุลในการทดลองทางความคิดทางอุณหพลศาสตร์

การเขียนสคริปต์

วิธีเรียกใช้สคริปต์ Python ใน Mac OS X

ในการรัน daemons ผ่าน launchd คุณจะต้องเขียนสคริปต์ ภาษาสคริปต์ที่พบบ่อยที่สุดคือ bash หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนสคริปต์ทุบตี คุณสามารถตรวจสอบ .ของเราได้ คู่มือเริ่มต้นสำหรับการเขียนสคริปต์ทุบตี.

ใช้ launchd

launchd-scripts-job-description

สคริปต์ใน launchd ถูกทริกเกอร์โดยคำจำกัดความของงาน ซึ่งเป็นไฟล์ .plist ที่จัดเก็บไว้ในไดเรกทอรีเฉพาะ ไฟล์ XML เหล่านี้ให้ชื่องาน ระบุสคริปต์ที่ควรเปิดใช้ และระบุว่าควรเรียกใช้สคริปต์เมื่อใด เมื่อคุณเขียนสคริปต์แล้ว คุณจะต้องเขียนและโหลดข้อกำหนดงานที่เรียกใช้สคริปต์ในเวลาที่เหมาะสม

คำจำกัดความของงานมีลักษณะดังนี้:

รุ่น="1.0"การเข้ารหัส="UTF-8"?>รุ่น="1.0">>>ฉลาก>>local.restart>>โปรแกรม>>/Users/user/Scripts/restart.sh>>RunAtLoad>/>>>

แก้ไขตามความจำเป็น จากนั้นใส่ลงในไฟล์ข้อความที่มีนามสกุล .plist ก่อนวางลงในไดเร็กทอรีที่ถูกต้อง (ดูด้านล่าง)

มีส่วนสำคัญสองสามส่วนในรายละเอียดงาน:

  • ฉลาก: ชื่องานภายใน Launchd ต้องไม่ซ้ำกันสำหรับแต่ละงาน สิ่งเหล่านี้เขียนด้วยสัญกรณ์โดเมนย้อนกลับ และ "ท้องถิ่น" เป็นโดเมนที่ยอดเยี่ยมสำหรับตัวแทนส่วนตัว
  • โปรแกรม: เส้นทางแบบเต็มของสคริปต์คำอธิบายงานนี้จะเปิดขึ้น
  • RunAtLoad: อธิบายว่าสคริปต์ควรรันเมื่อใด มีตัวเลือกที่แตกต่างกันสองสามอย่างที่นี่:
    • RunAtLoad: รันทันทีที่โหลดข้อกำหนดของงาน ทำงานเพียงครั้งเดียวต่อการโหลด
    • ช่วงเวลาเริ่มต้น: เริ่มงานทุก NS วินาที ตัวอย่างนี้จะรันงานทุกๆ 7200 วินาทีหรือทุกๆ 2 ชั่วโมง
      >ช่วงเวลาเริ่มต้น>>7200>
    • StartCalendarInterval: เรียกใช้งานในเวลาและวันที่ที่กำหนด รหัสด้านล่างจะทำงานทุกวันเวลา 9.00 น.
      >StartCalendarInterval>>>ชั่วโมง>>9>>นาที>>0>>

ตัวแทนเทียบกับ ภูต

เมื่อคุณเขียนรายละเอียดงานแล้ว คุณจะต้องบันทึกไว้ในไดเร็กทอรีที่เหมาะสม

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

ความแตกต่างระหว่างตัวแทนและภูตถูกดึงมาจากตำแหน่งที่บันทึกไว้ในคอมพิวเตอร์:

  • “~/Library/LaunchAgents” ทำงานในนามของผู้ใช้ที่เข้าสู่ระบบ
  • “/Library/LaunchDaemons” ทำงานในนามของผู้ใช้รูท

คุณจะต้องบันทึก plist ของคุณในตำแหน่งที่ถูกต้อง

กำลังโหลดงานเข้าสู่ launchctl

launchd-scripts-launchctl-list

เมื่อคุณสร้างสคริปต์และบันทึกตัวแทนของคุณไว้ในที่ที่ถูกต้องแล้ว คุณจะต้องโหลดสคริปต์ลงใน launchctl. สิ่งนี้จะเกิดขึ้นโดยอัตโนมัติเมื่อเข้าสู่ระบบในอนาคต

หากต้องการดูว่ามีอะไรกำลังทำงานอยู่ใน laucnhctl คุณสามารถใช้ launchctl list ในเทอร์มินัล รายการขนาดยักษ์นี้สามารถ grpped สำหรับสคริปต์ของคุณโดยติดป้ายกำกับด้วยสิ่งต่อไปนี้:

launchctl list |grep local.restart

ในการโหลดสคริปต์ ให้เปิด Terminal และใช้คำสั่งต่อไปนี้:

โหลด launchctl ~/ห้องสมุด/LaunchAgents/local.restart.plist
launchd-scripts-launchctl-load

หากต้องการลบสคริปต์ออกจากคิว launchctl ให้ใช้คำสั่ง ยกเลิกการโหลด สั่งการ:

launchctl ยกเลิกการโหลด ~/ห้องสมุด/LaunchAgents/local.restart.plist
launchd-scripts-launchctl-unload

การโหลดงานจะทำให้งานนั้นอยู่ในคิวการเรียกใช้งาน และงานจะรันตามเวลาที่ระบุในเงื่อนไขการเรียกใช้งาน หากคุณต้องการเรียกใช้สคริปต์ทันทีไม่ว่าจะเกิดอะไรขึ้น คุณควรใช้คำสั่ง "start":

launchctl start local.restart

คำสั่งนี้ใช้ป้ายกำกับของงานและจะทำงานก็ต่อเมื่อโหลดงานลงใน .แล้วเท่านั้น launchctl.

บทสรุป

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

เครดิตภาพ: Maxwell's_demon

การเปิดเผยข้อมูลพันธมิตร: ทำให้เทคโนโลยีง่ายขึ้นอาจได้รับค่าคอมมิชชั่นสำหรับผลิตภัณฑ์ที่ซื้อผ่านลิงก์ของเรา ซึ่งสนับสนุนงานที่เราทำเพื่อผู้อ่านของเรา

วิธีทำให้งาน macOS ซ้ำ ๆ เป็นอัตโนมัติด้วย Automator
วิธีทำให้งาน macOS ซ้ำ ๆ เป็นอัตโนมัติด้วย Automator

คุณพบว่าตัวเองทำงานซ้ำซากจำเจซ้ำแล้วซ้ำเล่าหรือไม่? ในบทช่วยสอนนี้ ฉันจะแสดงให้คุณเห็นถึงวิธีใช้ ...

การสร้างและการใช้การดำเนินการด่วนใน macOS Mojave
การสร้างและการใช้การดำเนินการด่วนใน macOS Mojave

การดำเนินการด่วนใน macOS Mojave ช่วยให้ผู้ใช้สามารถเข้าถึงเวิร์กโฟลว์ Automator ได้อย่างรวดเร็วแล...

5 ทางเลือก Apple Mail ที่ดีที่สุดสำหรับ Mac
5 ทางเลือก Apple Mail ที่ดีที่สุดสำหรับ Mac

Mail ของ Apple เป็นแอปพลิเคชั่นอีเมลดั้งเดิมฟรีที่มาพร้อมกับ Mac ทุกเครื่อง ทำให้เป็นตัวเลือกเริ่...