İşlem henüz tamamlanmadıysa, systemd zamanlayıcı birimi bir sonraki çalıştırmayı atlar mı?


18

Her 5 dakikada bir komut çalıştırmak için systemd kullanmak istiyorum. Ancak, zaman zaman görevin çalıştırılmasının 5 dakikadan fazla sürebilme riski vardır. Bu noktada, systemd komutun ikinci bir örneğini başlatır mı, yani çalışan 2 işlemle sonuçlanacak mıyım?

Birincisi tamamlanmadıysa, systemd'e ikinci bir işlem başlatmamasını söylemek mümkün müdür? Değilse, bazı iyi geçici çözümler nelerdir?

Not: Umarım cevap "Bu varsayılan davranıştır. Sadece belgelenmemiş." Durum buysa, birisi bana belgelerine karşı nasıl hata verileceğini söyleyebilir mi?

Not: Cron'un /unix//a/173928/11244 adresinde açıklanan benzer bir sorunu vardır . Systemd eşdeğerini arıyorum.

Yanıtlar:


27

Bu varsayılan (ve tek) davranıştır. Açıkça belgelenmemiştir, ancak systemd'nin işlem mantığı tarafından ima edilmektedir.

systemd.timer (5) okur:

Her bir zamanlayıcı dosyası için, zamanlayıcı sona erdiğinde etkinleştirilecek birimi tanımlayan eşleşen bir birim dosyası bulunmalıdır .

systemd (1) ise , birim durumlar kavramını ve bunlar arasındaki geçişleri açıklar:

Birimler "etkin" (başlangıç, bağlı, takılı, ..., birim türüne bağlı olarak, aşağıya bakın) veya "etkin değil" (yani durdurulmuş, bağlanmamış, fişsiz, ... anlamına gelir) olabilir . etkinleştirme veya devre dışı bırakma işlemi , yani iki durum arasında (bu durumlara "etkinleştirme", "devre dışı bırakma" denir).

Bu, bir zamanlayıcının tetiklenmesinin eşleşen birimin "aktivasyonuna", yani "aktif" duruma geçişine yol açtığı anlamına gelir.

Eşleştirme birimi "aktivasyon" sırasında zaten "aktif" ise, (a hizmet birimi için, bu araçlar hizmet birimi olmadıkça, "ana süreç hala çalışıyor" Type=oneshotve RemainAfterExit=true, hiçbir işlemin olacağı açık olmalı) alınmış.


"Oneshot" hizmetlerini açıklığa kavuşturabilir misiniz? Benim görüşüme göre bir "oneshot" servisi hiçbir koşulda başka bir kopya çalıştırmamalıdır (manpage: sistem, sistem takip birimlerine başlamadan önce işlemden çıkmak zorundadır)
Gima

1
@Gima ekstra parametresi olmayan bir oneshot birimi, ilk işlemi çalışırken "etkinleştirme" olarak kabul edilir ve çıkışta "etkin değil" haline gelir. Şu anda, başka bir tetikleyici o birimi tekrar etkinleştirebilir.
intelfx

1
@Gima ... ancak, RemainAfterExit=trueilk işlemi sona erdiğinde "etkin" olarak kalacak olan bir oneshot birimi , bu nedenle bir yönetici bu birimi açıkça devre dışı bırakmadığı (durduramadığı veya negatif olarak düşürülmediği sürece bir zamanlayıcıyı izleyen tetikleyiciler yok sayılır. bağımlılıkları.
intelfx

1
İnsanlar bunu davet ederken temsilci olmaya devam ediyorum. Umarım systemd belgelerini netleştirmez.
TomOnTime

1
Artık sistemd belgelerinin bir parçası - Note that in case the unit to activate is already active at the time the timer elapses it is not restarted, but simply left running. There is no concept of spawning new service instances in this case. freedesktop.org/software/systemd/man/systemd.timer.html
Sam
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.