launchd
รัน Daemons ( /Library/LaunchDaemons
หรือ/System/Library/LaunchDaemons
) เป็นรูทและจะรันโดยไม่คำนึงว่าผู้ใช้ล็อกอินหรือไม่ เรียกตัวแทน ( /Library/LaunchAgents/
หรือ~/Library/LaunchAgents/
) จะทำงานเมื่อผู้ใช้เข้าสู่ระบบในฐานะผู้ใช้นั้น คุณไม่สามารถใช้ setuid เพื่อเปลี่ยนผู้ใช้ที่รันสคริปต์บน daemons /System
ไดเรกทอรีที่สงวนไว้สำหรับงาน Mac OS X ดังนั้นผมขอแนะนำให้คุณวางlaunchd
plists เข้าไปอย่างใดอย่างหนึ่ง/Library
หรือ~/Library
โฟลเดอร์ที่มันทำให้รู้สึก
ดังนั้นขั้นตอนแรกคือการพิจารณาว่าคุณกำลังสร้างตัวแทนหรือภูต
ขั้นตอนที่สองคือการสร้าง.plist
ไฟล์ของคุณ คุณสามารถใช้โปรแกรมที่ใช้ GUI เช่นLingonเพื่อช่วยในเรื่องนี้หรือเพียงแค่ใช้โปรแกรมแก้ไขข้อความที่คุณชื่นชอบ:
ตัวอย่าง.plist
สำหรับการเรียกใช้สคริปต์ทุก ๆ ชั่วโมง ( StartInterval
หรือStartIntervalCalendar
เป็นกุญแจที่เราต้องการ - StartInterval
เพื่อให้รายการเกิดขึ้นทุกx
วินาทีStartIntervalCalendar
ในเวลาและ / หรือวันที่เฉพาะเจาะจงดู126907 ใน SuperUserสำหรับตัวอย่างที่ฉันทำด้วย StartCalendarInterval):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
ปรับเปลี่ยนที่.plist
จำเป็นเพื่อชี้ไปที่สคริปต์ของคุณและข้อโต้แย้งใด ๆ ตามความจำเป็น (ข้อโต้แย้งอยู่ในบรรทัดที่แยกต่างหาก) และบันทึกไฟล์ที่มีชื่อเดียวกันกับค่าป้ายกำกับ แต่ด้วย.plist
ในตอนท้าย (ตัวอย่างเช่นlocal.my-mac.flickrstats
จะถูกบันทึกเป็นlocal.my-mac.flickrstats.plist
) หากคุณยังไม่ได้ย้าย.plist
ไฟล์ไปที่/Library/LaunchDaemons
เมื่อสร้าง Daemon (ทำงานตลอดเวลา) หรือไปที่~/Library/LaunchAgents
(เฉพาะคุณเข้าสู่ระบบ) หรือ/Library/LaunchAgents
(ผู้ใช้ใด ๆ ที่เข้าสู่ระบบ)
ในการเริ่มงานที่คุณต้องการเรียกใช้launchctl
ตามความจำเป็นเพื่อโหลดไฟล์ สำหรับรายการใน/Library
คุณควรใช้ sudo: ตัวอย่างเช่นsudo launchctl load -w /PATH/TO/PLIST
สำหรับการอ้างอิงตรวจสอบคำถามต่อไปนี้เกี่ยวกับ Super User: คำสั่ง Launchd ในฐานะ root , โหลด daemon ของระบบและฉันจะรับสคริปต์ให้ทำงานทุกวันได้อย่างไร