launchd เป็นเครื่องมือสำหรับการเริ่ม หยุด และจัดการสคริปต์และกระบวนการ หากคุณเคยทำงานกับ Linux เวอร์ชันใดก็ตาม คุณอาจคุ้นเคยกับ cron launchd นั้นเป็น cron ใน macOS
daemons คืออะไร?
![launchd-scripts-maxwells-demon launchd-scripts-maxwells-demon](/f/58f664eba1974e92c7979df58f0a752c.png)
Daemons (ออกเสียงว่า “ปีศาจ”) เป็นสคริปต์ที่ทำงานอยู่เบื้องหลัง ไม่เหมือนกับแอปพลิเคชัน daemons ทำงานเป็นกระบวนการและไม่ได้อยู่ภายใต้การควบคุมโดยตรงของผู้ใช้หรือแอปพลิเคชันอื่น บน macOS พวกเขาอยู่ภายใต้คำสั่งของกรอบงาน launchd ซึ่งจะตัดสินใจเมื่อเริ่มต้นและหยุด
ชื่อที่ไม่ธรรมดานั้นมาจาก อสูรของแม็กซ์เวลล์ตัวแทนจินตภาพที่จัดเรียงโมเลกุลในการทดลองทางความคิดทางอุณหพลศาสตร์
การเขียนสคริปต์
![วิธีเรียกใช้สคริปต์ Python ใน Mac OS X วิธีเรียกใช้สคริปต์ Python ใน Mac OS X](/f/f3ff3e8b329361c3861434d358b9daa6.jpg)
ในการรัน daemons ผ่าน launchd คุณจะต้องเขียนสคริปต์ ภาษาสคริปต์ที่พบบ่อยที่สุดคือ bash หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนสคริปต์ทุบตี คุณสามารถตรวจสอบ .ของเราได้ คู่มือเริ่มต้นสำหรับการเขียนสคริปต์ทุบตี.
ใช้ launchd
![launchd-scripts-job-description launchd-scripts-job-description](/f/6de6b993b4958bf31e7913c5e4796433.png)
สคริปต์ใน 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 launchd-scripts-launchctl-list](/f/c2a59b7dbe936327a24e50b33f0a2075.png)
เมื่อคุณสร้างสคริปต์และบันทึกตัวแทนของคุณไว้ในที่ที่ถูกต้องแล้ว คุณจะต้องโหลดสคริปต์ลงใน launchctl
. สิ่งนี้จะเกิดขึ้นโดยอัตโนมัติเมื่อเข้าสู่ระบบในอนาคต
หากต้องการดูว่ามีอะไรกำลังทำงานอยู่ใน laucnhctl คุณสามารถใช้ launchctl list
ในเทอร์มินัล รายการขนาดยักษ์นี้สามารถ grpped สำหรับสคริปต์ของคุณโดยติดป้ายกำกับด้วยสิ่งต่อไปนี้:
launchctl list |grep local.restart
ในการโหลดสคริปต์ ให้เปิด Terminal และใช้คำสั่งต่อไปนี้:
โหลด launchctl ~/ห้องสมุด/LaunchAgents/local.restart.plist
![launchd-scripts-launchctl-load launchd-scripts-launchctl-load](/f/72dd76e533bc6d78c0f5fb244aa4ac35.png)
หากต้องการลบสคริปต์ออกจากคิว launchctl ให้ใช้คำสั่ง ยกเลิกการโหลด
สั่งการ:
launchctl ยกเลิกการโหลด ~/ห้องสมุด/LaunchAgents/local.restart.plist
![launchd-scripts-launchctl-unload launchd-scripts-launchctl-unload](/f/a1b9299e9cb792faa7f46a13b6a22c8f.png)
การโหลดงานจะทำให้งานนั้นอยู่ในคิวการเรียกใช้งาน และงานจะรันตามเวลาที่ระบุในเงื่อนไขการเรียกใช้งาน หากคุณต้องการเรียกใช้สคริปต์ทันทีไม่ว่าจะเกิดอะไรขึ้น คุณควรใช้คำสั่ง "start":
launchctl start local.restart
คำสั่งนี้ใช้ป้ายกำกับของงานและจะทำงานก็ต่อเมื่อโหลดงานลงใน .แล้วเท่านั้น launchctl
.
บทสรุป
คุณสามารถใช้ launchd เพื่อสร้างสคริปต์ที่ทำสิ่งต่างๆ เช่น ล้างไฟล์ รีสตาร์ทเซิร์ฟเวอร์ตามกำหนดเวลา หรือเรียกใช้แอปพลิเคชันเมื่อไฟล์บางไฟล์ปรากฏขึ้น หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ launchd คุณสามารถตรวจสอบ กวดวิชา laucnhd
เครดิตภาพ: Maxwell's_demon
การเปิดเผยข้อมูลพันธมิตร: ทำให้เทคโนโลยีง่ายขึ้นอาจได้รับค่าคอมมิชชั่นสำหรับผลิตภัณฑ์ที่ซื้อผ่านลิงก์ของเรา ซึ่งสนับสนุนงานที่เราทำเพื่อผู้อ่านของเรา