GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mengonfigurasi layanan systemd untuk memulai ulang secara berkala?

Saya melihat solusi di sini yang tampak elegan, meski agak berputar-putar. Ide utamanya adalah membuat layanan sekali pakai yang dipicu oleh pengatur waktu yang memulai ulang lainnya melayani.

Untuk pengatur waktu:

[Unit]
Description=Do something daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Untuk layanan sekali pakai:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart my_program.service

Untuk layanan sekali pakai di Ubuntu 16.04 LTS:

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart my_program.service

Solusi ini memungkinkan Anda memanfaatkan pengatur waktu systemd, termasuk kemampuan untuk memulai ulang layanan pada waktu tertentu dalam sehari, dan tidak hanya setelah beberapa waktu berlalu.


Untuk versi systemd>=229, ada opsi bernama RuntimeMaxSec , yang menghentikan layanan setelah berjalan selama jangka waktu tertentu.

misalnya Untuk memulai ulang setiap 7 hari:

[Service]
Restart=always
RuntimeMaxSec=7d

Bagi saya ini tampak lebih elegan daripada menyalahgunakan Type=notify dan WatchdogSec .

systemd menyediakan cara bersih untuk menambah dan mengganti arahan dalam file unit systemd yang disediakan oleh vendor. Unit Drop-In dijelaskan dalam man systemd.unit. Misalnya, jika Anda ingin me-restart layanan foo yang disediakan oleh sebuah paket secara berkala, Anda akan membuat file bernama /etc/systemd/system/foo.service.d/periodic-restart.conf . Isinya akan seperti yang ditunjukkan di atas. Lalu:

 systemctl daemon-reload
 systemctl restart foo

Anda dapat mengonfirmasi bahwa unit Drop-In telah dimuat karena akan dilaporkan dalam output status:

 systemctl status

Terakhir, Anda dapat mengonfirmasi bahwa direktif telah disertakan dengan menelusuri systemctl show keluaran:

 systemctl show foo.service | grep RuntimeMax

Direktif dilaporkan oleh systemctl show akan menjadi "RuntimeMaxUSec`


Linux
  1. Cara menginstal dan mengkonfigurasi Dovecot

  2. Bagaimana cara menggunakan Systemd untuk memulai kembali layanan saat down?

  3. Bagaimana cara mengirim email jika layanan systemd di-restart?

  1. Cara Menggunakan Perintah Systemctl untuk Mengelola Layanan Systemd

  2. Cara membuat layanan Systemd di Linux

  3. Bagaimana Mengkonfigurasi Systemd Untuk Menghidupkan Script Sederhana Dengan Standardio Dalam Layanan Jaringan?

  1. Bagaimana saya bisa me-restart layanan di server cPanel?

  2. Cara mengarahkan output dari layanan systemd ke file

  3. Bagaimana menghentikan layanan systemd