LaunchAgent, işlerin tekrar tekrar yürütülmesini engelliyor mu?


2

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:


2

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, launchdsonraki 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, launchdbu 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 .

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.