Adakah yang bisa merekomendasikan tutorial yang baik untuk menulis (dari awal) pekerjaan launchd gaya cron?

19

Saya punya pekerjaan yang cukup sederhana yang ingin saya jalankan setiap jam. Saya bisa melakukannya dengan menggunakan cron, tetapi saya pikir saya akan menggunakan ini untuk belajar launchd, karena saya mendengar hal-hal baik tentang itu. Saya mendapatkan man launchd.plisthalaman sebagai referensi, tetapi saya sedang mencari sesuatu yang lebih didasarkan pada membangun pekerjaan contoh.

Hank Gay
sumber
Ini harus dipindahkan ke Stackoverflow.
Philip Regan
5
@ Pilip Regan Saya memikirkannya, tetapi tidak terlalu banyak pemrograman yang terlibat, bagi saya. Jika saya mengajukan cronpertanyaan, bukankah superuser.com akan menjadi tempat yang tepat? Karena launchdini adalah versi Apple cron(dan juga daemontools, dan mungkin hal-hal lain), saya pikir ini adalah pilihan terbaik saya.
Hank Gay
Anda juga bisa memasukkannya ke dalam skrip automator dan menjalankannya dari iCal - jika dijalankan saat Anda
user151019
Dalam ironi yang lucu, tiga tahun kemudian saya perlu menerapkan proses cron / launchd sendiri dan mendapati diri saya melihat pertanyaan ini lagi dalam cahaya yang sama sekali berbeda. Stack Overflow memiliki pendapat beragam tentang apa yang harus dilakukan dengan pertanyaan launchd, tetapi mereka benar-benar tidak menyukai pertanyaan ini. Hanya mengira seluruh situasi itu lucu. +1
Philip Regan

Jawaban:

14

launchdmenjalankan Daemon ( /Library/LaunchDaemonsatau /System/Library/LaunchDaemons) sebagai root, dan akan menjalankannya terlepas dari apakah pengguna masuk atau tidak. Peluncuran Agen ( /Library/LaunchAgents/atau ~/Library/LaunchAgents/) dijalankan ketika pengguna masuk sebagai pengguna itu. Anda tidak dapat menggunakan setuid untuk mengubah pengguna yang menjalankan skrip pada daemon. The /Systemdirektori dicadangkan untuk tugas-tugas Mac OS X jadi saya sarankan menempatkan Anda launchdplists menjadi baik /Libraryatau ~/Libraryfolder itu masuk akal.

Jadi langkah pertama adalah menentukan apakah Anda membuat agen atau daemon.

Langkah kedua adalah membuat .plistfile Anda . Anda dapat menggunakan program berbasis GUI seperti Lingon untuk membantu ini atau cukup menggunakan editor teks favorit Anda:

Contoh .plistuntuk menjalankan skrip setiap jam ( StartIntervalatau StartIntervalCalendarkunci yang kami inginkan - StartIntervaluntuk item terjadi setiap xdetik, StartIntervalCalendaruntuk waktu dan / atau tanggal tertentu. Lihat 126907 tentang SuperUser untuk contoh yang saya buat dengan 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>

Ubah .plistseperlunya untuk mengarahkan ke skrip Anda dan argumen apa pun yang diperlukan (argumen ada di baris terpisah) dan simpan file dengan nama yang sama dengan nilai Label tetapi dengan .plistdi akhir. (misalnya, local.my-mac.flickrstatsakan disimpan sebagai local.my-mac.flickrstats.plist). Jika Anda belum melakukannya, pindahkan .plistfile itu ke /Library/LaunchDaemonssaat membuat Daemon (berjalan sepanjang waktu) atau ke ~/Library/LaunchAgents(hanya Anda yang masuk) atau /Library/LaunchAgents(pengguna mana pun yang masuk).

Untuk memulai pekerjaan yang ingin Anda jalankan launchctlseperlunya untuk memuat file. Untuk item dalam /Library, Anda harus menggunakan sudo: misalnya,sudo launchctl load -w /PATH/TO/PLIST

Untuk referensi, periksa juga pertanyaan-pertanyaan berikut tentang Pengguna Super: Luncurkan perintah sebagai root , Muat daemon lebar sistem , dan Bagaimana saya bisa menjalankan skrip setiap hari

Chealion
sumber
4

Saya tahu ini bukan tutorial yang bagus , tetapi Anda bisa melihat Panduan Pemrograman Daemon dan Layanan dari Apple, yang memiliki bagian tentang Penjadwalan Pekerjaan Jangka Waktu.

Saya tahu ini bukan tutorial lengkap, tetapi, dengan itu, Anda dapat memahami dasar-dasarnya launchd.

Ini juga memberikan contoh crondtugas:

<?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.apple.periodic-daily</string>
    <key>ProgramArguments</key>
    <array> 
        <string>/usr/sbin/periodic</string>
        <string>daily</string>
    </array>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
    <key>StartCalendarInterval</key>
    <dict>  
        <key>Hour</key>
        <integer>3</integer>
        <key>Minute</key>
        <integer>15</integer>
    </dict>
</dict>
</plist>
Studer
sumber
Saya downvoted karena Anda mengakui bahwa sumber daya itu bukan yang saya minta dan itu membuat saya sedikit RTFM, tetapi saya telah memikirkannya kembali dan saya ingin membatalkan downvote saya. Sayangnya saya tidak bisa kecuali pertanyaannya diedit (sudah terlalu lama), dan saya belum memiliki cukup tenaga untuk mengedit. Bisakah Anda men-tweak sesuatu? Terima kasih.
Hank Gay
@Hank Gay: Terima kasih atas komentar Anda. Saya mengedit jawaban saya juga.
Studer
4

Ini banyak membantu saya: http://launchd.info

Ini mencakup konfigurasi, administrasi dan pemecahan masalah menggunakan Terminal atau launchd GUI LaunchControl . Contoh disediakan juga.

khowl
sumber
2

Saya tahu Anda mencari tutorial, tetapi jika seseorang datang ke sini sebagai bagian dari mencari alat untuk membantu mereka membuat / mengedit entri launchd, saya telah menggunakan ini sebelumnya: Lingon (sourceforge)

Ini tidak lagi dikembangkan secara aktif tetapi apa yang ada berfungsi (dan jelas termasuk sumber dll). Saya telah menggunakannya di Snow Leopard untuk menjadwalkan pencadangan ke cloud Amazon, dll.

robsoft
sumber
Lingon sekarang berada di App Store jadi masih aktif, tidak gratis lihat < peterborgapps.com/lingon >
user151019
Versi appstore telah dilumpuhkan oleh persyaratan kebijakan Apple. Versi SourceForge yang sudah dikompilasi sebelumnya berfungsi dengan baik - meskipun dialog modal pada save, menyuruh saya untuk logout atau restart untuk mengaktifkan daemon tidak akan mengabaikan. Saya harus keluar dari program dari menu itu (tidak dipaksa berhenti) dan periksa untuk mengkonfirmasi bahwa ia telah menyimpan file dengan benar. Lumpuh dalam pemicu file dan direktori itu tidak didukung, juga tidak mungkin untuk membuat sesuatu yang berjalan sebagai root dengan versi AppStore.
marfarma