Nasıl kullanılır
- Servis adını, tam yollu komutu ve çalışma dizinini girin.
- Kullanıcıyı, yeniden başlatma politikasını ve varsa ortam değişkenlerini ayarlayın.
- İsterseniz temel sertleştirme ekleyin ya da zamanlayıcı oluşturmak için bir zamanlama (OnCalendar) girin.
- Oluşturulan dosyaları kopyalayın ya da kurulum komutlarını sunucuda bir root kabuğuna yapıştırın.
Seçeneklerin açıklaması
- Type
- simple, ön planda kalan programlara uygundur; oneshot ise zamanlanmış işler gibi bir kez çalışan betiklere uygundur.
- Restart
- Hata olunca, servis hatayla çıktığında veya çöktüğünde onu yeniden başlatır; Her zaman normal çıkıştan sonra da yeniden başlatır.
- OnCalendar
- Zamanlayıcının ne zaman tetikleneceği, örn. daily veya her gün sabah 3 için *-*-* 03:00:00. İfadeleri systemd-analyze calendar ile deneyin.
Örnek: zamanlayıcı olarak gece çalışan bir iş
Bir betiği her gece saat 03:00’te çalıştırmak için Komut (ExecStart) alanını /usr/local/bin/backup.sh, servis adını backup, Type’ı oneshot ve Restart’ı Asla olarak ayarlayın, sonra “Zamanlanmış çalıştır (.timer oluştur)” ve “Temel sertleştirme (yeni ayrıcalık yok, özel /tmp, salt okunur sistem)”yi işaretleyin. Varsayılan kullanıcı ve çalışma dizinine sahip olarak oluşturucu iki dosya üretir. backup.service:
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only
ve backup.timer:
[Unit]
Description=Run backup on a schedule
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
Zamanlayıcı açıkken iki şey değişir. Servis dosyası [Install] bölümünü kaybeder, çünkü onu zamanlayıcı başlatır; kurulum komutları da servisi değil zamanlayıcıyı etkinleştirir:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f
Zamanlayıcı seçeneğini işaretlediğinizde Type sizin için değiştirilmez; bu yüzden biten işler için oneshot değerini kendiniz seçin. oneshot bir servisin Restart Her zaman ile birleşimi geçerli değildir; bu yüzden oluşturucu Restart’ı dışarıda bırakır ve bir uyarı gösterir.
Sıkça sorulan sorular
Dosyayı nereye koymalıyım?
/etc/systemd/system/ içine. Sonra systemctl daemon-reload ve systemctl enable --now <ad>.service komutlarını çalıştırın — oluşturulan komutlar bunların hepsini yapar.
Servisim neden “Executable path is not absolute” hatasıyla başarısız oluyor?
Eski systemd sürümleri ExecStart içinde programın tam yolunu ister. Yolu which ile bulun, örn. which node.
Timer mı cron mu?
Timer'lar günlüğe (journal) kayıt yazar, sunucu kapalıyken kaçırılan çalıştırmaları telafi edebilir ve aynı anda iki kez çalışmaz. cron tek satırlık işler için daha basittir ve hâlâ gayet iyi çalışır.
Gizlilik
Bu araç tamamen tarayıcınızda çalışır. Dosyalarınız ve metinleriniz cihazınızda işlenir, sunucularımıza asla yüklenmez.