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
- Bir unit dosyasını düzenledikten sonra
daemon-reloadçalıştırın, yoksa systemd eski sürümü kullanır. - Çökme döngülerine dikkat edin. Uygulama anında başarısız olursa
Restart=alwayssonsuza dek dener —RestartSec=5denemeleri aralar; temel hatayı loglar üzerinden düzeltin. - Root olmayan bir
User=tercih edin ki ele geçirilmiş bir uygulama tüm sunucuya sahip olmasın.
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.
Yorumlar
Henüz yorum yok. İlk olun.