Apa cara termudah untuk menjalankan skrip saat boot di OS X?

12

Saya ingin skrip (bash / zsh / ruby ​​/ ...) dijalankan pada saat boot di OS X. Apa cara paling sederhana untuk melakukan ini, tanpa mengacaukan file xml / plist, dan lebih baik tidak perlu membuat meta AppleScript .

John Bachir
sumber

Jawaban:

7

MacOS X menggunakan Vixie cron, yang memiliki meta tag khusus untuk diluncurkan pada saat reboot. Lihat halaman manual untuk format file.

sesuatu seperti:

@reboot /path/to/script.sh

di crontab Anda akan bekerja. Saya tidak yakin bahwa ini solusi yang lebih baik daripada launchd, Anda mungkin memiliki lebih banyak alat meta yang terlihat di launchd daripada cron.

Homolka yang kaya
sumber
Senang, Anda membuktikan saya salah :-) Meskipun cronpada OS X tidak terlalu bagus dengan logging secara default (ada topik tentang itu hanya beberapa hari yang lalu).
Daniel Beck
ini sempurna.
John Bachir
1
Perhatikan bahwa cron, at, dan seterusnya sedikit banyak ditinggalkan di OS X. Saya tidak dapat menemukan pernyataan eksplisit tentang hal itu di berbagai dokumen, saya juga tidak tahu seberapa agresifnya penghentian mereka, tetapi launchd tampaknya lebih disukai secara umum. Lihat dokumentasi launchd untuk pengantar.
Norman Gray
Plist tidak akan bekerja untuk saya - ini bekerja seperti pesona - terima kasih! :-D
BG Bruno
Jujur tidak yakin apakah sintaks akan sama pada OS X.
NobleUplift
6

Jika Anda mengubah pendapat Anda:

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

Simpan seperti com.superuser.245713.plistdi /Library/LaunchAgents/dan buat root:wheelpemilik / grup.

Daniel Beck
sumber
1
Ini bisa dibilang lebih baik untuk memasukkannya /Library/LaunchAgentsdaripada /System/Library/LaunchDaemonskarena itu /Systemadalah hal-hal spesifik OS dan yang di bawah /Librarylebih banyak digunakan untuk hal-hal pihak ketiga. Juga, LaunchDaemons"harus mengandung item yang akan berjalan sebagai root, umumnya proses latar belakang" di mana sebagai LaunchAgents"dijalankan sebagai pengguna atau dalam konteks userland". Sumber kutipan itu adalah artikel hebat di launchd yang saya baca untuk pertanyaan launchd.
Doug Harris
@DougHarris Terima kasih atas sarannya! Saya harus mengakui bahwa saya baru saja mengetik ad-hoc ini - sementara saya biasanya menguji solusi saya, saya tidak mau me-restart mesin saya untuk ini.
Daniel Beck
Ini sangat bagus, walaupun saya suka solusi cron Vixie yang lebih baik :)
John Bachir
Sebenarnya, itu harus diletakkan di / Library / LaunchDaemons. Agen hanya berjalan di dalam sesi pengguna, yaitu mereka tidak akan berjalan (atau lebih tepatnya, menjadi layak untuk dijalankan) sampai seseorang masuk, akan berjalan lagi setiap kali seseorang masuk, dan selalu berjalan sebagai pengguna yang saat ini masuk. Run Daemon (/ menjadi yang memenuhi syarat untuk dijalankan) saat boot, dan walaupun biasanya dijalankan sebagai root, dapat dijalankan seperti beberapa pengguna lain dengan kunci UserName.
Gordon Davisson
2
@ the0ther Web tidak lupa.
Daniel Beck
2

Ada juga Login Hooks jika Anda lebih suka skrip dijalankan (sebagai root) ketika pengguna login daripada saat mesin di-boot.

Deditos
sumber