Uzun süren bir işin yürütülmesini otomatikleştirmek istiyorum. Günde bir kez başlatılmalıdır, ancak yalnızca önceki iş hala çalışmıyorsa. Bunu lansman ve nasıl başarabilirim?
Uzun süren bir işin yürütülmesini otomatikleştirmek istiyorum. Günde bir kez başlatılmalıdır, ancak yalnızca önceki iş hala çalışmıyorsa. Bunu lansman ve nasıl başarabilirim?
Yanıtlar:
Evet, launchd
çalışan "ajan" ın sadece bir örneğinin olmasını sağlar ve bunu otomatik olarak sizin için yapar. Arka plan işinizin yürütülmesini zamanlamak için StartInterval'i kullanarak işinizi normal bir şekilde ayarlayın; önceki örnek o zamanlanmış başlangıç aralığına gelene kadar tamamlanmadıysa, sistem yeni bir örnek başlatmaz.
Birden fazla zamanlama aralığı geçerse, launchd
sonraki aralıkta yalnızca bir yeni örnek çalışır. Bu konuda "akıllı".
İşte bir örnek plist:
<?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.mycompany.test</string>
<key>ProgramArguments</key>
<array>
<string>/some/path/to/a/script.sh</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
Yukarıdaki örnekte, /some/path/to/a/script.sh
çalışması 361 saniye sürerse, launchd
bu zaman dilimi boyunca 5 yeni örnek başlatmaz ve zamanla yalnızca 420'inci saniyede yeni bir örnek başlatır.
Launchd.plist (5) man sayfasındaki ifadeler de aynı şeyi söylüyor, ancak yazıldığı şekli açıkça belli değil:
StartInterval
Bu isteğe bağlı anahtar, işin N saniyede bir başlatılmasını sağlar. Sistem uykuda ise, bilgisayar tekrar uyandığında işe başlanır. Birden fazla aralık bilgisayar uyanmadan önce geçerse, bu olaylar uykudan uyandıktan sonra bir olaya birleştirilecektir.
Bu son cümle esasen “ iyi iş davranışı kurallarınalaunchd
uyduğunuz sürece işlerinizi sizin için tekil yapar ” diyor .