TL; DR: ปล่อยกระบวนการพื้นเมืองใช้ OSX launchd
และผู้จัดการ
ให้ทำlaunchctl
daemon คุณจะสามารถควบคุมสคริปต์ได้ทุกด้าน คุณสามารถเรียกใช้ครั้งเดียวหรือยังมีชีวิตอยู่เป็นภูต ในกรณีส่วนใหญ่นี่เป็นวิธีที่จะไป
- สร้าง
.plist
ไฟล์ตามคำแนะนำในเอกสาร Apple Dev ที่นี่หรือรายละเอียดเพิ่มเติมด้านล่าง
- สถานที่ใน
~/Library/LaunchAgents
- เข้าสู่ระบบ (หรือเรียกใช้ด้วยตนเองผ่าน
launchctl load [filename.plist]
)
สำหรับข้อมูลเพิ่มเติมเกี่ยวlaunchd
, บทความวิกิพีเดียเป็นสิ่งที่ดีมากและอธิบายระบบและข้อได้เปรียบกว่าระบบเก่าอื่น ๆ
นี่คือเฉพาะไฟล์ plist เพื่อเรียกใช้สคริปต์ที่เข้าสู่ระบบ
อัปเดต 2017/09/25 สำหรับ OSX El Capitan และใหม่กว่า (ให้เครดิตกับJosé Messias Jr ):
<?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>com.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
แทนที่<string>
หลังคีย์โปรแกรมด้วยคำสั่งที่คุณต้องการ (โปรดทราบว่าสคริปต์ใด ๆ ที่อ้างอิงโดยคำสั่งนั้นจะต้องสามารถเรียกใช้งานได้chmod a+x /path/to/executable/script.sh
เพื่อให้แน่ใจว่าเป็นสำหรับผู้ใช้ทุกคน)
บันทึกเป็น ~/Library/LaunchAgents/com.user.loginscript.plist
เรียกใช้launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
และออกจากระบบ / เพื่อทดสอบ (หรือทดสอบโดยตรงเรียกใช้launchctl start com.user.loginscript
)
ตัด/var/log/system.log
ข้อความผิดพลาด
กุญแจสำคัญคือนี่เป็นรายการ launchd เฉพาะผู้ใช้ดังนั้นมันจะถูกเรียกใช้ในการเข้าสู่ระบบสำหรับผู้ใช้ที่กำหนด daemons การเปิดใช้งานระบบเฉพาะ (วางไว้ใน/Library/LaunchDaemons
) จะทำงานในการบูต
หากคุณต้องการให้สคริปต์ทำงานในการเข้าสู่ระบบสำหรับผู้ใช้ทั้งหมดฉันเชื่อว่า LoginHook เป็นตัวเลือกเดียวของคุณและนั่นอาจเป็นเหตุผลที่มันมีอยู่