Apakah unit pengatur waktu systemd melewatkan proses selanjutnya jika prosesnya belum selesai?

18

Saya ingin menggunakan systemd untuk menjalankan perintah setiap 5 menit. Namun, ada risiko bahwa kadang-kadang tugas dapat memakan waktu lebih dari 5 menit untuk dijalankan. Pada titik itu, apakah systemd akan memulai instance kedua dari perintah, yaitu apakah saya akan berakhir dengan 2 proses yang berjalan?

Apakah mungkin untuk memberitahu systemd untuk tidak memulai proses kedua jika yang pertama belum selesai? Jika tidak, apa solusi yang baik?

Catatan: Saya harap jawabannya adalah "Itu perilaku default. Hanya saja tidak didokumentasikan." Jika ini situasinya, bisakah seseorang memberi tahu saya cara mengajukan bug terhadap dokumen mereka?

Catatan: Cron memiliki masalah serupa yang dibahas di /unix//a/173928/11244 . Saya mencari yang setara dengan systemd.

TomOnTime
sumber

Jawaban:

27

Ini adalah perilaku default (dan satu-satunya). Ini tidak didokumentasikan secara eksplisit, tetapi tersirat oleh logika operasi systemd.

systemd.timer (5) berbunyi:

Untuk setiap file timer, file unit yang cocok harus ada, menggambarkan unit yang akan diaktifkan ketika timer berlalu .

systemd (1) , pada gilirannya, menjelaskan konsep status unit dan transisi di antara mereka:

Unit mungkin "aktif" (artinya dimulai, terikat, dicolokkan, ..., tergantung pada jenis unit, lihat di bawah), atau "tidak aktif" (artinya berhenti, tidak terikat, dicabut, ...), serta di proses diaktifkan atau dinonaktifkan , yaitu antara dua negara (negara-negara ini disebut "mengaktifkan", "menonaktifkan").

Ini berarti bahwa pemicu timer mengarah ke "aktivasi" unit yang cocok, yaitu transisi ke keadaan "aktif".

Jika unit yang cocok sudah "aktif" pada saat "aktivasi" (untuk unit layanan, ini berarti "proses utama masih berjalan", kecuali unit layanan telah Type=oneshotdan RemainAfterExit=true), harus jelas bahwa tidak ada tindakan akan dilakukan diambil.

intelfx
sumber
Bisakah Anda mengklarifikasi "oneshot" -services? Dalam pandangan saya layanan "oneshot" tidak boleh menjalankan salinan lain dalam kondisi apa pun (halaman manual: proses harus keluar sebelum systemd memulai unit tindak lanjut)
Gima
1
@Gima unit oneshot tanpa parameter tambahan dianggap "mengaktifkan" saat proses awalnya berjalan, dan menjadi "tidak aktif" saat keluar. Pada saat ini, pemicu lain dapat mengaktifkan unit itu lagi.
intelfx
1
@Gima ... Namun, unit oneshot yang RemainAfterExit=trueakan tetap "aktif" ketika proses awalnya keluar, sehingga pemicu timer berikutnya akan diabaikan kecuali administrator secara eksplisit menonaktifkan (menghentikan) unit itu, atau diturunkan oleh negatif ketergantungan.
intelfx
1
Saya terus mendapatkan perwakilan karena orang mengundang ini. Saya harap systemd tidak menjelaskan dokumen mereka.
TomOnTime
1
Ini sekarang menjadi bagian dari systemd docs - 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