Computer >> คอมพิวเตอร์ >  >> ระบบ >> MAC

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

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

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

ภูตคืออะไร

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

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

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

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

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

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

ใช้ launchd

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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>local.restart</string>
        <key>Program</key>
        <string>/Users/user/Scripts/restart.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

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

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

  • ป้ายกำกับ: ชื่องานภายใน Launchd ต้องไม่ซ้ำกันสำหรับแต่ละงาน สิ่งเหล่านี้เขียนด้วยสัญลักษณ์โดเมนย้อนกลับ และ “ท้องถิ่น” เป็นโดเมนที่ยอดเยี่ยมสำหรับตัวแทนส่วนตัว
  • โปรแกรม: เส้นทางแบบเต็มของสคริปต์คำอธิบายงานนี้จะเปิดขึ้น
  • RunAtLoad: อธิบายว่าสคริปต์ควรรันเมื่อใด มีตัวเลือกต่างๆ ดังต่อไปนี้
    • RunAtLoad :รันทันทีที่โหลดข้อกำหนดของงาน เรียกใช้เพียงครั้งเดียวต่อการโหลด
    • ช่วงเริ่มต้น :เริ่มงานทุก n วินาที ตัวอย่างนี้จะรันงานทุกๆ 7200 วินาทีหรือทุกๆ 2 ชั่วโมง
      <key>StartInterval</key> 
      <integer>7200</integer>
    • StartCalendarInterval :เรียกใช้งานในเวลาและวันที่ที่กำหนด รหัสด้านล่างจะทำงานทุกวันเวลา 9.00 น.
      <key>StartCalendarInterval</key> 
      <dict>
        <key>Hour</key> 
        <integer>9</integer> 
        <key>Minute</key> 
        <integer>0</integer> 
      </dict>

เอเจนต์ vs. daemons

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

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

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

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

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

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

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

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

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

launchctl list | grep local.restart

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

launchctl load ~/Library/LaunchAgents/local.restart.plist
วิธีใช้ launchd เพื่อเรียกใช้สคริปต์ตามกำหนดเวลาใน macOS

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

launchctl unload&nbsp;~/Library/LaunchAgents/local.restart.plist
วิธีใช้ launchd เพื่อเรียกใช้สคริปต์ตามกำหนดเวลาใน macOS

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

launchctl start local.restart

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

บทสรุป

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