Her X saniye bir bash betiği çalıştırın

 · 2 mins

Bu kılavuz sayesinde bir bash betiğini her X saniye çalıştırabileceksiniz.
Şunu da göz önünde bulundurun ki systemd kullandığımız için komutlar root olarak çalışacaktır.

Betiğinizi çalıştıracak bir servis oluşturun

İlk aşamamız betiği zamanlayıcının istediği her zaman çalıştıracak bir servis oluşturmak.

/etc/systemd/system/ klasöründe isim.service adında bir dosya oluşturmalısınız.
Bunun için nano kullanabilirsiniz.

Lütfen isim kelimesini kendi koyacağınız bir isimle değiştirin. Bu isim hem zamanlayıcıda, hem de serviste kullanılacaktır.

Eğer nano kurulu değilse cihazınızda bu komutu çalıştırarak onu kurabilirsiniz :

Ubuntu :

sudo apt-get install nano

CentOS / RHEL / CloudLinux / Fedora :

sudo yum install nano

Dosyayı oluşturmak için nano’yu çalıştırın :

sudo nano /etc/systemd/system/isim.service

ve onu şununla doldurun (CTRL+ Shift + V kullanarak terminale yapıştırın) :

[Unit]
Description=Kısa bir açıklama

[Service]
Type=oneshot
ExecStart=/bin/bash /betiginize/giden/yol/betik.sh

Description betiğin ne yaptığını açıklamalıdır. Tüm aktif servisleri systemctl kullanarak görüntülediğinizde gözükür. /betiginize/giden/yol/betik.sh betiğinizin konumudur. Şunu yazarak konumu öğrenebilirsiniz:

readlink -f betik.sh

systemd‘yi her X saniye tetikleyen bir zamanlayıcı oluşturun

İkinci aşamamız her X saniye systemd‘ye daha önce oluşturduğunuz servisi çalıştırmasını söyleyen bir zamanlayıcı kurmak. Bu dosyayı oluşturmak için bir kez daha nano kullanacağız.

Şunu çalıştırın :

sudo nano /etc/systemd/system/isim.timer

> Her iki dosya için de isim aynı olmalıdır. Sonunda isim.service ve isim.timer dosyalarındaki isimler aynı olmalı.

Zamanlayıcı dosyayı düzenlemeye hazır olunca şunu yapıştırın:

[Unit]
Description=Kısa bir açıklama

[Timer]
OnUnitActiveSec=360s
OnBootSec=10s

[Install]
WantedBy=timers.target

Description zamanlayıcının yaptığı işi açıklar.
360 size gereken saniyeyle (X) değiştirilmelidir.
OnBootSec zamanlayıcıyı makine boot olduktan 10 saniye sonra servisi başlatır, bu sayede her zaman kendi elinizle başlatmanıza gerek kalmaz.
Geri kalanını aynı şekilde bırakabilirsiniz.

Zamanlayıcınızı ve servisinizi test edin

Son işiniz tüm systemctl daemonlarını tekrar yüklemek, zamanlayıcıyı başlatmak ve aktif olup olmadığını kontrol etmektir. Aklınızda şu bulunsun, isim.timer başladığında servis çalıştırılır ve sonraki her X saniye tekrar çalıştırılır.

sudo systemctl daemon-reload
sudo systemctl start name.timer
systemctl list-timers

Şu şekilde bir çıktı almalısınız :

timers.jpg

Zamanlayıcınız UNIT sütununda ve servisin tekrar tetiklenmesine kalan süre de LEFT sütununda gözükür.

İşte bu! Bash betiğiniz ve içeriğindeki komutlar her X saniye çalıştırılacaktır. Makinenizi tekrar başlatsanız bile.