İçeriğe geç
ToolMug

systemd Servis Dosyası Oluşturucu

Bir Node.js, Python veya Go programını Linux sunucuda çalışır tutun, açılışta başlatın ve çöktüğünde yeniden başlatın — her systemd seçeneğini hatırlamadan. Komutu ve kullanıcıyı girin, yeniden başlatma politikasını ve ortam değişkenlerini seçin, sonra .service dosyasını kurulum ve başlatma komutlarıyla birlikte kopyalayın. cron'a modern bir alternatif olan .timer için Zamanlanmış çalıştır kutusunu işaretleyin.

Tarayıcınızda çalışır — girdiğiniz hiçbir şey yüklenmez

Dosya adı olur, örn. myapp → myapp.service

Programın tam yolunu kullanın, örn. /usr/bin/python3 app.py

Komut ön planda çalışmaya devam eder (çoğu web uygulaması ve betik).

Her satırda bir KEY=value; boşluk içeren değerler sizin için tırnak içine alınır.

0 sistem varsayılanını korur.

myapp.service

Kurulum ve başlatma

Komutları sunucuda root olarak yapıştırın. Bir unit dosyasını düzenledikten sonra systemctl daemon-reload komutunu yeniden çalıştırın. Günlükler: journalctl -u <ad>.

Nasıl kullanılır

  1. Servis adını, tam yollu komutu ve çalışma dizinini girin.
  2. Kullanıcıyı, yeniden başlatma politikasını ve varsa ortam değişkenlerini ayarlayın.
  3. İsterseniz temel sertleştirme ekleyin ya da zamanlayıcı oluşturmak için bir zamanlama (OnCalendar) girin.
  4. 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.

İlgili araçlar