Saya mencoba membatasi jumlah layanan (dalam wadah) restart. Versi OS adalah centos-release-7-5, file layanannya cukup banyak seperti di bawah ini (menghapus beberapa parameter untuk kenyamanan membaca). Itu harus cukup lurus ke depan karena beberapa posting lain menunjukkan (Post of Server Fault batas restart 1, Post of Stack Overflow restart batas 2). Namun StartLimitBurst dan StartLimitIntervalSec tidak pernah bekerja untuk saya.
Saya diuji dengan beberapa cara: (1) Saya memeriksa PID layanan, membunuh layanan dengan "kill -9 ****" beberapa kali. Layanan selalu dimulai ulang setelah 20-an! (2) Saya juga mencoba mengacaukan file layanan, membuat wadah tidak pernah berjalan. Namun, itu tidak berhasil, file layanan terus restart.
Ada ide?
[Unit]
Description=Hello Fluentd
After=docker.service
Requires=docker.service
StartLimitBurst=2
StartLimitIntervalSec=150s
[Service]
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker stop "fluentd"
ExecStartPre=-/usr/bin/docker rm -f "fluentd"
ExecStart=/usr/bin/docker run fluentd
ExecStop=/usr/bin/docker stop "fluentd"
Restart=always
RestartSec=20s
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Jawaban:
StartLimitIntervalSec=
telah ditambahkan sebagai bagian dari systemd v230. Di systemd v229 dan di bawah, Anda hanya dapat menggunakanStartLimitInterval=
. Anda juga perlu meletakkanStartLimitInterval=
danStartLimitBurst=
di[Service]
bagian - bukan[Unit]
bagian.Untuk memeriksa versi systemd Anda di CentOS, jalankan
rpm -q systemd
.Jika Anda pernah memutakhirkan ke systemd v230 atau lebih tinggi, nama-nama lama di
[Service]
bagian akan terus berfungsi.Sumber: https://lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html
Anda dapat memiliki masalah ini tanpa melihat kesalahan sama sekali, karena systemd mengabaikan arahan yang tidak diketahui. systemd mengasumsikan bahwa banyak arahan baru dapat diabaikan dan masih memungkinkan layanan untuk berjalan.
Dimungkinkan untuk secara manual memeriksa file unit untuk arahan yang tidak diketahui. Setidaknya itu berfungsi pada systemd terbaru:
sumber
StartLimitBurst
bagian [Layanan], tetapi dokumentasi mengatakan itu harus di bagian [Unit]. freedesktop.org/software/systemd/man/systemd.unit.htmlStartLimitIntervalSec=interval, StartLimitBurst=burst Configure unit start rate limiting. Units which are started more than burst times within an interval time interval are not permitted to start any more.
/usr/lib/systemd/systemd --version
dan itu v219. Saya perlu menjaga versi systemd.systemd-analyze
. Terima kasih!systemd-analyze
hanya berfungsi untuk file layanan yang sudah diinstal, bukan pada (katakanlah) file lokal yang Anda coba tulis tetapi belum diinstal. (Setidaknya, itulah yang tampaknya menjadi kasus pada v219 dalam upaya saya untuk menggunakannya.) Jika itu benar, mungkin ada baiknya menyebutkannya dalam jawaban ini.Saya rasa saya menemukan masalahnya. Semua dokumen online menyarankan semua parameter dalam file UNIT (file unit systemd ), tetapi masih dalam sistem saya (centos 7.5), mereka berada dalam file layanan. Selain itu namanya "StartLimitInterval", bukan "StartLimitIntervalSec".
sumber