Herkes cron tarzı bir fırlatma işi (sıfırdan) yazmak için iyi bir öğretici tavsiye edebilir misiniz?


19

Her saat koşmak istediğim oldukça basit bir işim var. Bunu kullanarak yapabilirdim cron, ama bunu öğrenmek için kullanacağımı düşündüm launchd, çünkü bu konuda iyi şeyler duyuyorum. man launchd.plistSayfayı referans olarak aldım , ancak örnek bir iş oluşturmaya dayalı bir şey arıyorum.


Bu Stackoverflow'a taşınmalıdır.
Philip Regan

5
@Philip Regan Düşündüm, ama bana çok fazla programlama dahil değil. Bir cronsoru sorsaydım, superuser.com doğru yer olmaz mıydı? Yana launchdApple'ın versiyonudur cron(ve ayrıca daemontools, ve muhtemelen diğer şeyler), Bu benim en iyi seçenek olduğunu düşünüyorum.
Hank Gay


Komik bir ironi içinde, üç yıl sonra kendimi bir cron / fırlatma işlemi uygulamam ve kendimi bu soruya tamamen farklı bir ışıkta bakarken bulmam gerekiyor. Stack Overflow, fırlatma sorularıyla ne yapılacağı konusunda karışık bir görüşe sahip, ancak bu soruları gerçekten sevmiyorlar. Sadece tüm durumun eğlenceli olduğunu düşündüm. +1
Philip Regan

Yanıtlar:


14

launchdDaemons'u ( /Library/LaunchDaemonsveya /System/Library/LaunchDaemons) kök olarak çalıştırır ve kullanıcıların giriş yapmış olup olmadıklarına bakılmaksızın bunları çalıştırır. Başlatma Aracıları ( /Library/LaunchAgents/veya ~/Library/LaunchAgents/), kullanıcı bu kullanıcı olarak oturum açtığında çalıştırılır. Setuid'i betiklerde betik kullanan kullanıcıyı değiştirmek için kullanamazsınız. /SystemBen senin koyarak tavsiye böylece dizin, Mac OS X görevleri için ayrılmıştır launchdya içine Mülk Listelerini /Libraryveya ~/Librarymantıklı olarak klasörde.

Yani ilk adım bir ajan veya bir daemon yapıp yapmadığınızı belirlemektir.

İkinci adım .plistdosyanızı oluşturmaktır. Bu konuda yardımcı olması için Lingon gibi GUI tabanlı programları kullanabilirsiniz veya en sevdiğiniz metin düzenleyicisini kullanabilirsiniz:

.plistHer saatte bir komut dosyası çalıştırmak için bir örnek ( StartIntervalveya StartIntervalCalendaristediğimiz anahtarlar - StartIntervalbir öğenin her xsaniye, StartIntervalCalendarbelirli bir saat ve / veya tarih için gerçekleşmesi. StartCalendarInterval ile yaptığım bir örnek için SuperUser'da 126907'ye bakın ):

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

.plistKomut dosyanızı ve gereken bağımsız değişkenleri işaret edecek şekilde değiştirin (bağımsız değişkenler ayrı satırlardadır) ve dosyayı Etiket değeriyle aynı ada sahip ancak .plistsonunda kaydedin . (örneğin, local.my-mac.flickrstatsolarak kaydedilir local.my-mac.flickrstats.plist). Henüz yapmadıysanız, Daemon (her zaman çalışır) oluştururken veya (yalnızca oturum açmış durumdasınız) veya (herhangi bir kullanıcı oturum açmış durumda iken) bu .plistdosyayı taşıyın ./Library/LaunchDaemons~/Library/LaunchAgents/Library/LaunchAgents

İşi başlatmak için launchctlgerektiği şekilde çalıştırmak istediğiniz dosyayı yükleyin. İçindeki öğeler /Libraryiçin sudo kullanmalısınız: örneğin,sudo launchctl load -w /PATH/TO/PLIST

Başvuru için ayrıca Süper Kullanıcı ile ilgili aşağıdaki soruları da inceleyin: Kök olarak Launchd komutu , Sistem çapında bir arka plan programı yükleyin ve Her gün çalıştırmak için bir komut dosyasını nasıl alabilirim


4

İyi bir öğretici olmadığını biliyorum , ancak Zamanlanmış İşleri Zamanlama ile ilgili bir bölüme sahip olan Apple'dan Daemons ve Hizmetler Programlama Kılavuzu'na bir göz atabilirsiniz .

Bunun tam bir öğretici olmadığını biliyorum, ancak bununla ilgili temel bilgileri anlayabilirsiniz launchd.

Ayrıca bir crondgörevin bir örneğini sunar :

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

Kaynağın istediğim gibi olmadığını ve beni biraz RTFM olarak vurduğunu itiraf ettiniz, ancak tekrar düşündüm ve downvote'umu iptal etmek istiyorum. Maalesef soru düzenlenmedikçe yapamam (çok uzun zaman oldu) ve henüz düzenlemek için yeterli temsilcim yok. Bir şey değiştirebilir misin? Teşekkürler.
Hank Gay

@Hank Gay: Yorumunuz için teşekkürler. Cevabımı da düzenledim.
Studer


2

Bir öğretici aradığınızı biliyorum, ancak şans eseri birisi buraya fırlatma girişlerini yapmalarına / düzenlemelerine yardımcı olacak bir araç aramanın bir parçası olarak geliyor, bunu daha önce kullandım: Lingon (sourceforge)

Artık aktif olarak geliştirilmiyor, ancak orada ne işe yarıyor (ve tabii ki kaynak vb.). Amazon bulutu vb. İçin yedeklemeler planlamak için Snow Leopard'da kullandım.


Lingon yüzden sadece serbest göremiyorum hala aktif App Store artık < peterborgapps.com/lingon >
user151019

Uygulama mağazası sürümü Apple ilke gereksinimleri tarafından saklandı. SourceForge önceden derlenmiş sürümü iyi çalışıyor - kaydetme üzerindeki kalıcı iletişim kutusu, oturum açmayı veya daemon'u etkinleştirmek için yeniden başlatmamı söylüyor. Bu menüden (çıkmaya zorlamak değil) programdan çıkmak ve dosyayı düzgün kaydettiğini onaylamak zorunda kaldı. Bu dosya ve dizin tetikleyicide saklanan desteklenmez ve AppStore sürümüyle root olarak çalışan bir şey oluşturmak mümkün değildir.
marfarma
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.