Belirli bir zamanda bir sistem hizmetini başlatın / durdurun.


14

Belirli zamanlarda bir systemd.service başlatmak ve durdurmak istiyorum. Muhtemelen işi başlatmak için bir .timer birimi kullanacağım, ancak belirli bir süre sonra veya belirli bir zamanda işi durdurmak için yerleşik bir yol var mı , yoksa çalıştıran ikinci bir .timer birimi oluşturmam gerekiyor stopmu?

Teşekkürler

Yanıtlar:


6

Bir hizmet A'yı bir zamanlayıcı ile durdurmak oneshotiçin, çakışması olacağı türde bir hizmet B oluşturabilir , ardından hizmeti B başlatmak için bir zamanlayıcı kullanabilirsiniz.

Bir birimin başka bir birimde Çakışma = ayarı varsa, birincinin başlatılması ikinciyi durdurur veya tersi de geçerlidir. ( kaynak )

Servis:

[Unit]
Conflicts=B.service
...

B.service:

[Unit]
Description=B service description

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

B.timer:

[Timer]
AccuracySec=1
OnActiveSec=10

[Install]
WantedBy=timers.target

Aşağıdakiler 10 saniye sonra A servisini durduracaktır.

systemctl start A.service
systemctl start B.timer

2

Birkaç cron işi kullanabilirsiniz:

 # ┌───────────── dk. (0 - 59) 
 # │ ┌────────────── saat (0 - 23)
 # │ │ ┌─────────────── ayın günü (1-31)
 # │ │ │ ┌──────────────── ay (1-12)
 # │ │ │ │ ┌───────────────── haftanın günü (0-6)
 # │ │ │ │ │
 # │ │ │ │ │
   * * * * * systemctl start $ SERVICE.service
   * * * * * systemctl stop $ SERVICE.service

Cron hakkında daha fazla bilgi: https://en.wikipedia.org/wiki/Cron , https://wiki.archlinux.org/index.php/Cron


8
Bir cron işi .timerOP'nin zaten bildiği systemd birimleri üzerinde nasıl bir gelişmedir ?
Pavel Šimerda

Yapabilirim, evet, ama sorum gerçekten systemd ile nasıl doğru bir şekilde yapılacağı? Bir işi belirli bir zamanda veya belirli bir süre sonra durdurmanın standart bir yolu olması gerektiğini varsayıyorum.
Jamie Kitson

@JamieKitson Dürüst olmak gerekirse, aslında cron ve systemd zamanlayıcılarının ötesinde böyle bir özellik olması gerektiğini düşünmüyorum . Çoğu systemd kurulumu hiçbir zaman bu özellikleri kullanmaz ve systemctlcron, systemd zamanlayıcıları ve ne istersen onu çalıştırmanın bir sakıncası yoktur. Bence bu cevap diğer cevaplar kadar geçerli.
Pavel Šimerda

örneğin www-data'nın systemctl start & stop komutunu çalıştırmasına nasıl izin veriyorsunuz?
alvaropgl

@alvaropgl Yorumunuzun kullanıcılarla (www-data) ve işlemleri çalıştırmak / çalıştırmamak için ne kadar sınırlı erişime sahip olabilecekleri (systemctl) ile ilgisi yoktur. Lütfen yeni bir konu başlatın. İpucu: Muhtemelen, www-data kullanıcısında daha fazla sorumluluk + kapsam sağlama konusundaki mevcut yaklaşımınızdan ziyade, istediğiniz şeyleri yapmak için bir API yapmaya bakmak istiyorsunuz.
Scott Prive

2

.serviceDosyada belirli bir çalışma zamanı yapılandırıldıktan sonra bir hizmeti durdurmanın başka bir yolu daha vardır .

RuntimeMaxSec=...

Hizmetin başarısız olduğu düşünülmeyebilir, ancak bu, uzun süredir devam eden bir hizmeti öldürmenin az ya da çok mantıklı bir sonucudur.

Daha iyi bir cevap almak için, bu tür alışılmadık bir özelliği kullanma gerekçenizi açıklamak isteyebilirsiniz. Hizmetler yalnızca sabit bir süre için değil, sonsuza kadar veya açıkça durduruluncaya kadar çalışır.


1
Evet, bunu ve posta listesindeki sınırlamalarını tartıştık: lists.freedesktop.org/archives/systemd-devel/2016-Nisan /…
Jamie Kitson

1
Olağandışı değil. Sunucu en az trafiği aldığında, kaynak gerektiren bir hizmeti, belki de SETI'yi yalnızca gece çalıştırmaya ne dersiniz? Ayrıca, çalıştığım yerde, sunucularda bir istisna olduğunda destek ekibini telefonları aracılığıyla uyandırmak için tasarlanmış bir uyarı arka plan programımız var. Gerçekten uyanıkken bu can sıkıcı şeyin çalışmasını istemiyoruz çünkü bu sunucular yoğun kullanım sırasında sol ve sağ sorunları var.
James
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.