EQVPS

Bir uygulamayı çalışır tutmak için systemd servisi nasıl oluşturulur

Herhangi bir betiği ya da uygulamayı; açılışta başlayan, çökerse yeniden başlayan ve journalctl'e log tutan yönetilen bir servise dönüştürün. Bir unit dosyası yazın, etkinleştirin ve durumunu kontrol edin — Linux'ta bir şeyi 24/7 çalıştırmanın standart yolu.

Bir uygulamayı & ya da nohup ile çalıştırmak, sunucu yeniden başlayana, süreç çökene ya da loglarını bulmak isteyene kadar iyidir — sonra dağılır. systemd standart cevaptır: uygulamanızı açılışta başlatır, ölürse yeniden başlatır ve loglarını yakalar. Bir betiği ya da ikili dosyayı yönetilen bir servise çevirmek küçük bir dosyadır.

1. Bir unit dosyası yazın

/etc/systemd/system/myapp.service oluşturun:

[Unit]
Description=My application
After=network.target

[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

ExecStart, WorkingDirectory ve User değerlerini uygulamanıza göre ayarlayın. Restart=always onu hayatta tutan şeydir.

2. Özel bir kullanıcı oluşturun (önerilir)

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp

Root olmayan bir kullanıcı olarak çalışmak, uygulama bir gün ele geçirilirse hasarı sınırlar.

3. Etkinleştirin ve başlatın

sudo systemctl daemon-reload
sudo systemctl enable --now myapp

enable açılışta başlamasını sağlar; --now hemen başlatır.

4. Durumu ve logları kontrol edin

sudo systemctl status myapp
journalctl -u myapp -f       # canlı logları izle

Günlük komutlar

sudo systemctl restart myapp   # bir değişiklikten sonra yeniden başlat
sudo systemctl stop myapp      # durdur
sudo systemctl disable myapp   # açılışta başlatmayı kapat

Dürüst uyarılar

Sonraki adımlar

Bir systemd servisi, herhangi bir şeyi 24/7 çalışır tutmanızın yoludur — örneğin gece gündüz çalışan bir yapay zekâ ajanı ya da kendi barındırdığınız bir RustDesk sunucusunun arkasındaki röle. Uygulamanız bunun yerine konteynerlenmişse, Docker'ın --restart unless-stopped'ı aynı rolü oynar — Docker nasıl kurulur sayfasına bakın.

SSS

Uygulamayı sadece arka planda çalıştırmak yerine neden systemd?

Arka plandaki bir süreç (& ya da nohup ile) yeniden başlatmada ölür, çökerse geri gelmez ve loglarını dağıtır. Bir systemd servisi açılışta otomatik başlar, başarısızlıkta yeniden başlar ve çıktısını journalctl'e gönderir. Linux'ta uzun ömürlü bir şeyi çalıştırmanın standart, güvenilir yoludur.

Unit dosyaları nereye konur?

Kendi servisleriniz /etc/systemd/system/ içine, servis başına bir dosya, birşey.service gibi bir adla konur. Birini oluşturduktan ya da düzenledikten sonra systemd'nin değişikliği alması için 'systemctl daemon-reload' çalıştırın, ardından etkinleştirip başlatın.

'Restart=always' ne yapar ve dezavantajları var mı?

systemd'ye servisi herhangi bir nedenle çıktığı her seferinde yeniden başlatmasını söyler — bir şeyi çalışır tutmanın anahtarı. Tek tuzak çökme döngüsüdür: uygulama başlangıçta anında başarısız olursa systemd onu durmadan yeniden başlatır. Denemeleri aralamak için 'RestartSec=5' ekleyin ve temel hatayı düzeltmek için logları inceleyin.

Servisin loglarını nasıl görürüm?

Canlı çıktıyı izlemek için 'journalctl -u yourservice -f', geçmişi okumak için -f olmadan kullanın. systemd stdout ve stderr'i otomatik yakalar, dolayısıyla kendiniz log dosyası kurmanıza gerek yoktur.

Servis root olarak mı çalışmalı?

Tercihen hayır. Özel bir root olmayan kullanıcı oluşturun ve unit'te 'User=' ayarlayın; böylece uygulamanın ele geçirilmesi tüm makineyi teslim etmez. Yalnızca servis gerçekten ihtiyaç duyduğunda root olarak çalıştırın.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.