วิธีที่ง่ายที่สุดในการเรียกใช้สคริปต์ขณะบู๊ตใน OS X คืออะไร


12

ฉันต้องการสคริปต์ (bash / zsh / ruby ​​/ ... ) เพื่อให้ทำงานในเวลาบูตใน OS X วิธีที่ง่ายที่สุดในการทำเช่นนี้คือโดยไม่ต้องยุ่งกับไฟล์ xml / plist และไม่จำเป็นต้องสร้างเมตา AppleScript .

คำตอบ:


7

MacOS X ใช้ Vixie cron ซึ่งมีเมตาแท็กพิเศษสำหรับการเปิดตัวในเวลารีบูต ดูman pageสำหรับรูปแบบไฟล์

สิ่งที่ต้องการ:

@reboot /path/to/script.sh

ใน crontab ของคุณจะทำงาน ฉันไม่แน่ใจว่านี่เป็นทางออกที่ดีกว่า launchd คุณอาจมีเครื่องมือ meta ที่ดู launchd มากกว่า cron


รักเลยคุณพิสูจน์ฉันผิด :-) แม้ว่าcronใน OS X นั้นไม่ค่อยดีเท่าไหร่กับการบันทึกโดยค่าเริ่มต้น
Daniel Beck

สมบูรณ์แบบ
John Bachir

1
โปรดทราบว่า cron, at, และอื่น ๆ จะมีการคัดค้านใน OS X ฉันไม่สามารถหาคำสั่งที่ชัดเจนในเอกสารต่าง ๆ และฉันรู้ว่าพวกเขาเลิกใช้อย่างจริงจัง แต่ launchd ไม่ต้องการโดยทั่วไป ดูเอกสารประกอบการเปิดตัวสำหรับการแนะนำ
Norman Grey

Plist ไม่ได้ผลสำหรับฉัน - งานนี้มีเสน่ห์เหมือนกัน - ขอบคุณ! :-D
BG Bruno

สุจริตไม่แน่ใจว่าไวยากรณ์จะเหมือนกันใน OS X หรือไม่
NobleUplift

6

ในกรณีที่คุณเปลี่ยนความคิดเห็นของคุณ:

<?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.superuser.245713</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>UserName</key>
    <string>someuser</string>
</dict>
</plist>

จัดเก็บcom.superuser.245713.plistใน/Library/LaunchAgents/และทำให้root:wheelเจ้าของ / กลุ่ม


1
มันเป็นเนื้อหาที่ดีกว่าที่จะใส่ลง/Library/LaunchAgentsมากกว่า/System/Library/LaunchDaemonsเนื่องจาก/Systemเป็นสิ่งที่ OS เฉพาะและเป็นหนึ่งภายใต้การ/Libraryถูกนำมาใช้มากขึ้นสำหรับสิ่งที่บุคคลที่สาม นอกจากนี้LaunchDaemons"ควรมีรายการที่จะเรียกใช้ในฐานะรูทโดยทั่วไปกระบวนการพื้นหลัง" โดยที่LaunchAgents"ทำงานเป็นผู้ใช้หรือในบริบทของ userland" แหล่งอ้างอิงสำหรับคำพูดเหล่านั้นเป็นบทความที่ยอดเยี่ยมเกี่ยวกับ launchdที่ฉันปรึกษาสำหรับคำถามเกี่ยวกับ launchd
Doug Harris

@DougHarris ขอบคุณสำหรับคำแนะนำ! ฉันต้องยอมรับว่าฉันเพิ่งพิมพ์โฆษณานี้ - ในขณะที่ฉันมักจะทดสอบวิธีแก้ปัญหาของฉันฉันไม่เต็มใจที่จะรีสตาร์ทเครื่องสำหรับสิ่งนี้
Daniel Beck

นี้เป็นสิ่งที่ดีมาก แต่ผมชอบวิธีการแก้ปัญหาที่ดีกว่า cron Vixie :)
จอห์น Bachir

จริงๆแล้วมันควรจะอยู่ใน / Library / LaunchDaemons ตัวแทนจะทำงานภายในเซสชันผู้ใช้เท่านั้นนั่นคือพวกเขาจะไม่ทำงาน (หรือแม่นยำมากขึ้นมีสิทธิ์ทำงาน) จนกว่าจะมีคนลงชื่อเข้าใช้จะทำงานอีกครั้งทุกครั้งที่มีคนลงชื่อเข้าใช้และทำงานเป็นผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน Daemons run (/ มีสิทธิ์ทำงานได้ตอนบูต) และในขณะที่พวกเขารันโดยปกติในฐานะ root สามารถเรียกใช้ในฐานะผู้ใช้รายอื่นด้วยรหัสผู้ใช้
Gordon Davisson


2

นอกจากนี้ยังมีLogin Hooksหากคุณต้องการให้สคริปต์รัน (เป็น root) เมื่อผู้ใช้ลงชื่อเข้าใช้แทนที่จะบูตเครื่อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.