Mulai / hentikan layanan systemd.pada waktu tertentu

14

Saya ingin memulai dan menghentikan systemd.service pada waktu tertentu. Mungkin saya akan menggunakan unit .timer untuk memulai pekerjaan, tetapi apakah ada cara yang dibuat untuk menghentikan pekerjaan setelah durasi tertentu, atau pada waktu tertentu , atau apakah saya harus membuat unit .timer kedua yang menjalankan stop?

Terima kasih

Jamie Kitson
sumber

Jawaban:

6

Untuk menghentikan layanan A dengan penghitung waktu, Anda dapat membuat layanan B dengan tipe oneshotyang akan bertentangan dengannya, kemudian menggunakan penghitung waktu untuk memulai layanan B.

Jika sebuah unit memiliki pengaturan Conflicts = pada unit lain, memulai yang pertama akan menghentikan yang terakhir dan sebaliknya. ( sumber )

A. layanan:

[Unit]
Conflicts=B.service
...

B. layanan:

[Unit]
Description=B service description

[Service]
Type=oneshot
ExecStart=/bin/echo ''

B.timer:

[Timer]
AccuracySec=1
OnActiveSec=10

[Install]
WantedBy=timers.target

Berikut ini akan menghentikan layanan A setelah 10 detik.

systemctl start A.service
systemctl start B.timer
Radivarig
sumber
2

Memang ada cara lain untuk menghentikan layanan setelah runtime tertentu dikonfigurasi dalam .servicefile.

RuntimeMaxSec=...

Anda mungkin tidak menyukai kenyataan bahwa layanan ini dianggap gagal tetapi itu adalah hasil yang kurang lebih logis dari membunuh layanan yang sudah berjalan lama.

Untuk mendapatkan jawaban yang lebih baik Anda mungkin ingin menjelaskan alasan Anda untuk menggunakan fitur yang tidak biasa. Layanan pada umumnya dimaksudkan untuk berjalan selamanya atau sampai mereka secara eksplisit dihentikan, bukan hanya untuk jangka waktu yang tetap.

Pavel Šimerda
sumber
1
Ya, kami membahas hal ini dan batasannya pada milis: lists.freedesktop.org/archives/systemd-devel/2016-April/…
Jamie Kitson
1
Bukan hal yang aneh. Bagaimana dengan menjalankan layanan yang membutuhkan sumber daya, mungkin SETI, pada malam hari saja, ketika server mendapatkan lalu lintas paling sedikit. Juga, tempat saya bekerja, kami memiliki daemon peringatan yang dirancang untuk membangunkan tim dukungan melalui ponsel mereka ketika ada pengecualian di server. Kami benar-benar tidak ingin hal menjengkelkan itu berjalan ketika kami benar-benar bangun karena server-server itu memiliki masalah kiri dan kanan selama penggunaan puncak.
James M. Lay
0

Anda bisa menggunakan beberapa pekerjaan cron:

 # ┌───────────── min (0 - 59) 
 # │ ┌───────────── jam (0 - 23)
 # │ │ ┌─────────────── hari dalam bulan (1 - 31)
 # │ │ │ ┌──────────────── bulan (1 - 12)
 # │ │ │ │ ┌───────────────── hari dalam seminggu (0 - 6)
 # │ │ │ │ │
 # │ │ │ │ │
   * * * * * systemctl mulai $ SERVICE.service
   * * * * * systemctl menghentikan $ SERVICE.service

Info lebih lanjut tentang cron: https://en.wikipedia.org/wiki/Cron , https://wiki.archlinux.org/index.php/Cron

John Moon
sumber
8
Bagaimana pekerjaan cron merupakan peningkatan dari pada sistemd .timer unit yang sudah diketahui OP?
Pavel Šimerda
Saya bisa, ya, tetapi pertanyaan saya adalah bagaimana melakukan ini dengan benar dengan systemd? Saya berasumsi harus ada cara standar untuk mendapatkan pekerjaan untuk berhenti pada waktu tertentu atau setelah jangka waktu tertentu.
Jamie Kitson
@JamieKitson Sejujurnya saya tidak berpikir ada kebutuhan sebenarnya untuk menjadi fitur tersebut di luar cron dan systemd timer. Kebanyakan instalasi systemd tidak akan pernah menggunakan fitur seperti itu dan tidak ada yang salah dengan menjalankan systemctlmenggunakan cron, timer systemd dan apa pun yang Anda suka. Menurut pendapat saya, jawaban ini sama validnya dengan jawaban lainnya.
Pavel Šimerda
Bagaimana Anda mengizinkan misalnya untuk www-data untuk menjalankan systemctl mulai & berhenti?
alvaropgl
@alvaropgl Komentar Anda tidak ada hubungannya dengan pengguna (www-data) dan akses terbatas apa yang mungkin mereka miliki untuk menjalankan / tidak menjalankan proses (systemctl), yang merupakan topik. Silakan mulai topik baru. Petunjuk: Anda mungkin ingin melihat membuat API untuk melakukan hal-hal yang Anda inginkan, daripada pendekatan Anda saat ini yang memungkinkan lebih banyak tanggung jawab + cakupan pada pengguna data-www.
Scott Prive