Cách dễ nhất để chạy tập lệnh khi khởi động trong OS X là gì?


12

Tôi muốn một tập lệnh (bash / zsh / ruby ​​/ ...) chạy vào lúc khởi động trong OS X. Cách đơn giản nhất để làm điều này là gì, mà không làm rối các tệp xml / plist và tốt nhất là không cần tạo meta AppleScript .

Câu trả lời:


7

MacOS X sử dụng Vixie cron, có thẻ meta đặc biệt để khởi chạy khi khởi động lại. Xem trang người đàn ông cho định dạng tập tin.

cái gì đó như:

@reboot /path/to/script.sh

trong crontab của bạn sẽ làm việc. Tôi không chắc chắn rằng đây là một giải pháp tốt hơn launchd, có lẽ bạn có nhiều công cụ meta nhìn vào launchd hơn cron.


Yêu nó, bạn đã chứng minh tôi sai :-) Mặc dù crontrên OS X không tuyệt vời bằng việc đăng nhập theo mặc định (có một chủ đề trên đó chỉ vài ngày trước).
Daniel Beck

đây là hoàn hảo.
John Bachir

1
Lưu ý rằng cron, tại, v.v ... ở một mức độ nào đó không được chấp nhận trong OS X. Tôi không thể tìm thấy một tuyên bố rõ ràng về điều đó trong các tài liệu khác nhau, tôi cũng không biết chúng bị phản đối mạnh mẽ như thế nào, nhưng launchd dường như thường được ưa thích hơn. Xem tài liệu launchd để giới thiệu.
Norman Gray

Plist sẽ không làm việc cho tôi - điều này hoạt động như một cơ duyên - cảm ơn bạn! :-D
BG Bruno

Thành thật không chắc cú pháp có giống với OS X.
NobleUplift

6

Trong trường hợp bạn thay đổi ý kiến ​​của mình:

<?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>

Lưu trữ như com.superuser.245713.plisttrong /Library/LaunchAgents/và làm cho root:wheelchủ sở hữu / nhóm.


1
Nó được cho là tốt hơn để đặt nó vào /Library/LaunchAgentschứ không phải là /System/Library/LaunchDaemonskể từ khi /Systemlà thứ OS cụ thể và một trong những thuộc /Libraryđược sử dụng nhiều cho các công cụ của bên thứ ba. Ngoài ra, LaunchDaemons"nên chứa các mục sẽ chạy dưới quyền root, thường là các quá trình nền" trong đó LaunchAgents"chạy như một người dùng hoặc trong bối cảnh của vùng người dùng". Nguồn cho những trích dẫn đó là một bài viết tuyệt vời về launchd mà tôi tham khảo cho các câu hỏi launchd.
Doug Harris

@DougHarris Cảm ơn những lời đề nghị! Tôi phải thừa nhận rằng tôi chỉ cần gõ quảng cáo này - trong khi tôi thường kiểm tra các giải pháp của mình, tôi không sẵn sàng khởi động lại máy của mình cho việc này.
Daniel Beck

Điều này rất hay, mặc dù tôi thích giải pháp cron Vixie hơn :)
John Bachir

Trên thực tế, nó nên được đặt trong / Library / LaunchDaemons. Đại lý chỉ chạy trong phiên người dùng, nghĩa là họ sẽ không chạy (hoặc chính xác hơn là đủ điều kiện để chạy) cho đến khi ai đó đăng nhập, sẽ chạy lại mỗi khi ai đó đăng nhập và luôn chạy như người dùng hiện đang đăng nhập. Daemon chạy (/ trở thành đủ điều kiện để chạy) khi khởi động và trong khi chúng thường chạy dưới quyền root, có thể được chạy như một số người dùng khác với khóa UserName.
Gordon Davisson


2

Ngoài ra còn có Móc đăng nhập nếu bạn muốn tập lệnh chạy (với quyền root) khi người dùng đăng nhập thay vì khi máy khởi động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.