{"id":5804,"date":"2026-10-04T12:38:44","date_gmt":"2026-10-04T09:38:44","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/?p=5804"},"modified":"2026-10-04T06:26:15","modified_gmt":"2026-10-04T03:26:15","slug":"systemd-servisi-surekli-yeniden-basliyor-teshis","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/systemd-servisi-surekli-yeniden-basliyor-teshis\/","title":{"rendered":"systemd Servisi S\u00fcrekli Yeniden Ba\u015fl\u0131yor: Te\u015fhis"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div class=\"aiw-summary\">\n<p class=\"aiw-box-title\">H\u0131zl\u0131 \u00f6zet<\/p>\n<p>systemd servisi s\u00fcrekli yeniden ba\u015fl\u0131yorsa \u00f6nce servis durumunu ve journal kay\u0131tlar\u0131n\u0131 inceleyin; hemen daha uzun bir <code>RestartSec<\/code> de\u011feri eklemek as\u0131l hatay\u0131 gizleyebilir.<\/p>\n<ul>\n<li><code>systemctl status<\/code> ile son \u00e7\u0131k\u0131\u015f kodunu, sinyali ve systemd&#8217;nin verdi\u011fi uyar\u0131y\u0131 g\u00f6r\u00fcn.<\/li>\n<li><code>journalctl -u<\/code> kay\u0131tlar\u0131nda uygulaman\u0131n neden kapand\u0131\u011f\u0131n\u0131, eksik ortam de\u011fi\u015fkenini veya port \u00e7ak\u0131\u015fmas\u0131n\u0131 aray\u0131n.<\/li>\n<li>Uygulama hatas\u0131n\u0131 d\u00fczelttikten sonra servis dosyas\u0131n\u0131 yeniden y\u00fckleyin ve kontroll\u00fc bi\u00e7imde ba\u015flat\u0131n.<\/li>\n<li>H\u0131z s\u0131n\u0131rlamas\u0131na tak\u0131ld\u0131ysan\u0131z <code>reset-failed<\/code> kullan\u0131n; bu komut uygulama ar\u0131zas\u0131n\u0131 d\u00fczeltmez.<\/li>\n<\/ul>\n<\/div>\n<p>\u00c7al\u0131\u015fan bir uygulama birka\u00e7 saniyede bir kapan\u0131yor ve yeniden a\u00e7\u0131l\u0131yorsa sorun yaln\u0131zca systemd katman\u0131nda aranmayabilir. systemd, servis tan\u0131m\u0131nda <code>Restart=<\/code> etkin oldu\u011fu i\u00e7in kapanan s\u00fcreci tekrar \u00e7al\u0131\u015ft\u0131r\u0131yor olabilir. As\u0131l neden; yanl\u0131\u015f komut, eksik dosya, hatal\u0131 izin, kullan\u0131lamayan port, eksik ortam de\u011fi\u015fkeni veya uygulaman\u0131n kendi ba\u015flang\u0131\u00e7 hatas\u0131 olabilir.<\/p>\n<p>Bu rehberde te\u015fhisi systemd katman\u0131ndan uygulama katman\u0131na do\u011fru daraltacaks\u0131n\u0131z. \u00d6nce servis ad\u0131n\u0131 ve ger\u00e7ek \u00e7al\u0131\u015fma bi\u00e7imini do\u011frulay\u0131n, ard\u0131ndan g\u00fcnl\u00fck kayd\u0131ndaki \u00e7\u0131k\u0131\u015f kodunu yorumlay\u0131n. De\u011fi\u015fiklik yapmadan \u00f6nce mevcut unit dosyas\u0131n\u0131 ve uygulama yap\u0131land\u0131rmas\u0131n\u0131 yedekleyin; her d\u00fczeltmeden sonra servisin ger\u00e7ekten sa\u011fl\u0131kl\u0131 kald\u0131\u011f\u0131n\u0131 g\u00f6zlemleyin.<\/p>\n<div id=\"toc_container\" role=\"navigation\" aria-label=\"Table of Contents\" data-nosnippet class=\"toc_transparent no_bullets toc_numbered toc_title_center\"><p class=\"toc_title\">\u0130\u00e7indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Yeniden_baslama_dongusunu_dogrulayin\"><span class=\"toc_number toc_depth_1\">1.<\/span> Yeniden ba\u015flama d\u00f6ng\u00fcs\u00fcn\u00fc do\u011frulay\u0131n<\/a><ul><li><a href=\"#Unit_dosyasinin_hangi_kaynaktan_geldigini_gorun\"><span class=\"toc_number toc_depth_2\">1.1.<\/span> Unit dosyas\u0131n\u0131n hangi kaynaktan geldi\u011fini g\u00f6r\u00fcn<\/a><\/li><\/ul><\/li><li><a href=\"#Journal_kayitlarinda_gercek_hatayi_bulun\"><span class=\"toc_number toc_depth_1\">2.<\/span> Journal kay\u0131tlar\u0131nda ger\u00e7ek hatay\u0131 bulun<\/a><ul><li><a href=\"#Cikis_kodu_ve_sinyal_nasil_yorumlanir\"><span class=\"toc_number toc_depth_2\">2.1.<\/span> \u00c7\u0131k\u0131\u015f kodu ve sinyal nas\u0131l yorumlan\u0131r?<\/a><\/li><\/ul><\/li><li><a href=\"#Baslatma_komutunu_systemd_disindan_sinayin\"><span class=\"toc_number toc_depth_1\">3.<\/span> Ba\u015flatma komutunu systemd d\u0131\u015f\u0131ndan s\u0131nay\u0131n<\/a><\/li><li><a href=\"#Sik_gorulen_kok_nedenleri_daraltin\"><span class=\"toc_number toc_depth_1\">4.<\/span> S\u0131k g\u00f6r\u00fclen k\u00f6k nedenleri daralt\u0131n<\/a><ul><li><a href=\"#Yanlis_ExecStart_veya_eksik_dosya\"><span class=\"toc_number toc_depth_2\">4.1.<\/span> Yanl\u0131\u015f ExecStart veya eksik dosya<\/a><\/li><li><a href=\"#Port_cakismasi_ve_bagimlilik_sirasi\"><span class=\"toc_number toc_depth_2\">4.2.<\/span> Port \u00e7ak\u0131\u015fmas\u0131 ve ba\u011f\u0131ml\u0131l\u0131k s\u0131ras\u0131<\/a><\/li><li><a href=\"#Izinler_ve_calisma_dizini\"><span class=\"toc_number toc_depth_2\">4.3.<\/span> \u0130zinler ve \u00e7al\u0131\u015fma dizini<\/a><\/li><li><a href=\"#FPM_CLI_ve_kuyruk_iscilerini_karistirmayin\"><span class=\"toc_number toc_depth_2\">4.4.<\/span> FPM, CLI ve kuyruk i\u015f\u00e7ilerini kar\u0131\u015ft\u0131rmay\u0131n<\/a><\/li><\/ul><\/li><li><a href=\"#Restart_ayarini_ne_zaman_degistirmelisiniz\"><span class=\"toc_number toc_depth_1\">5.<\/span> Restart ayar\u0131n\u0131 ne zaman de\u011fi\u015ftirmelisiniz?<\/a><\/li><li><a href=\"#Duzeltmeyi_uygulayin_ve_dogrulayin\"><span class=\"toc_number toc_depth_1\">6.<\/span> D\u00fczeltmeyi uygulay\u0131n ve do\u011frulay\u0131n<\/a><\/li><li><a href=\"#Sik_Sorulan_Sorular\"><span class=\"toc_number toc_depth_1\">7.<\/span> S\u0131k Sorulan Sorular<\/a><ul><li><a href=\"#systemd_servisi_neden_surekli_yeniden_basliyor_ama_status_active_gorunuyor\"><span class=\"toc_number toc_depth_2\">7.1.<\/span> systemd servisi neden s\u00fcrekli yeniden ba\u015fl\u0131yor ama status active g\u00f6r\u00fcn\u00fcyor?<\/a><\/li><li><a href=\"#Restartalways_kullanmak_sorunu_cozer_mi\"><span class=\"toc_number toc_depth_2\">7.2.<\/span> Restart=always kullanmak sorunu \u00e7\u00f6zer mi?<\/a><\/li><li><a href=\"#Servis_manuel_basliyor_systemd_ile_neden_baslamiyor\"><span class=\"toc_number toc_depth_2\">7.3.<\/span> Servis manuel ba\u015fl\u0131yor, systemd ile neden ba\u015flam\u0131yor?<\/a><\/li><li><a href=\"#reset-failed_komutundan_sonra_servis_yine_durursa_ne_anlama_gelir\"><span class=\"toc_number toc_depth_2\">7.4.<\/span> reset-failed komutundan sonra servis yine durursa ne anlama gelir?<\/a><\/li><\/ul><\/li><li><a href=\"#Son_kontrol_listesi\"><span class=\"toc_number toc_depth_1\">8.<\/span> Son kontrol listesi<\/a><\/li><\/ul><\/div>\n<h2><span id=\"Yeniden_baslama_dongusunu_dogrulayin\">Yeniden ba\u015flama d\u00f6ng\u00fcs\u00fcn\u00fc do\u011frulay\u0131n<\/span><\/h2>\n<p>\u0130lk belirti genellikle <code>systemctl status<\/code> \u00e7\u0131kt\u0131s\u0131nda g\u00f6r\u00fcl\u00fcr. Servis k\u0131sa s\u00fcreli\u011fine <code>active (running)<\/code> g\u00f6r\u00fcn\u00fcr, ard\u0131ndan <code>failed<\/code> olur veya tekrar ba\u015flat\u0131l\u0131r. Komutu servis ad\u0131n\u0131zla \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl status ornek-servis.service --no-pager -l<\/code><\/pre>\n<p>Buradaki <code>ornek-servis.service<\/code> ifadesini ger\u00e7ek unit ad\u0131yla de\u011fi\u015ftirin. \u00d6nko\u015ful olarak sunucuda sudo yetkiniz ve servisin tan\u0131ml\u0131 oldu\u011fu systemd tabanl\u0131 bir i\u015fletim sistemi bulunmal\u0131d\u0131r. \u00c7\u0131kt\u0131da \u00f6zellikle \u015fu sat\u0131rlara bak\u0131n:<\/p>\n<ul>\n<li><strong>Active:<\/strong> Servisin mevcut durumunu ve son durum de\u011fi\u015fikli\u011finin zaman\u0131n\u0131 g\u00f6sterir.<\/li>\n<li><strong>Main PID:<\/strong> Uygulaman\u0131n ana i\u015flem kimli\u011fidir. Her denemede de\u011fi\u015fiyorsa s\u00fcre\u00e7 yeniden olu\u015fturuluyor olabilir.<\/li>\n<li><strong>code=exited<\/strong> ve <strong>status=<\/strong>: Uygulaman\u0131n normal bir \u00e7\u0131k\u0131\u015fla m\u0131, hata koduyla m\u0131 kapand\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/li>\n<li><strong>code=killed<\/strong> ve sinyal bilgisi: S\u00fcrecin bir sinyal ile sonland\u0131r\u0131ld\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fcr\u00fcr.<\/li>\n<li><strong>Start request repeated too quickly<\/strong>: systemd&#8217;nin k\u0131sa s\u00fcrede \u00e7ok say\u0131da ba\u015far\u0131s\u0131z ba\u015flatma g\u00f6rd\u00fc\u011f\u00fcn\u00fc ve yeni denemeyi ge\u00e7ici olarak s\u0131n\u0131rlad\u0131\u011f\u0131n\u0131 belirtir.<\/li>\n<\/ul>\n<p>Bu son uyar\u0131 k\u00f6k neden de\u011fildir. Ba\u015far\u0131s\u0131z ba\u015flang\u0131\u00e7lar\u0131n sonucunu ve systemd&#8217;nin koruma davran\u0131\u015f\u0131n\u0131 g\u00f6sterir. Ger\u00e7ek hata \u00e7o\u011funlukla daha \u00f6nceki uygulama log sat\u0131rlar\u0131nda bulunur.<\/p>\n<h3><span id=\"Unit_dosyasinin_hangi_kaynaktan_geldigini_gorun\">Unit dosyas\u0131n\u0131n hangi kaynaktan geldi\u011fini g\u00f6r\u00fcn<\/span><\/h3>\n<p>Bir servis dosyas\u0131 da\u011f\u0131t\u0131m taraf\u0131ndan, paket y\u00f6neticisiyle veya sizin olu\u015fturdu\u011funuz bir override ile gelmi\u015f olabilir. Etkin yap\u0131land\u0131rmay\u0131 ve override dosyalar\u0131n\u0131 birlikte inceleyin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl cat ornek-servis.service<\/code><\/pre>\n<p>\u00c7al\u0131\u015fma dizini, kullan\u0131c\u0131, ba\u015flatma komutu, ortam dosyas\u0131 ve yeniden ba\u015flatma ayarlar\u0131n\u0131 ayr\u0131ca listelemek i\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl show ornek-servis.service -p FragmentPath -p DropInPaths -p ExecStart -p User -p Group -p WorkingDirectory -p EnvironmentFiles -p Restart -p RestartSec<\/code><\/pre>\n<p><code>systemctl cat<\/code> \u00e7\u0131kt\u0131s\u0131, ana unit dosyas\u0131n\u0131 ve <code>\/etc\/systemd\/system\/ornek-servis.service.d\/<\/code> alt\u0131ndaki ek ayarlar\u0131 g\u00f6rmenizi sa\u011flar. Ayn\u0131 ayar\u0131n birden fazla yerde tan\u0131mlanmas\u0131 te\u015fhisi zorla\u015ft\u0131rabilece\u011finden, etkin dosya ile override dosyas\u0131n\u0131 birlikte de\u011ferlendirin.<\/p>\n<div class=\"aiw-note aiw-note-warning\">\n<p class=\"aiw-box-title\">Dikkat<\/p>\n<p>Paket taraf\u0131ndan kurulan unit dosyas\u0131n\u0131 do\u011frudan de\u011fi\u015ftirmek g\u00fcncelleme s\u0131ras\u0131nda kaybolabilir. Kal\u0131c\u0131 bir de\u011fi\u015fiklik gerekiyorsa \u00f6nce mevcut tan\u0131m\u0131 yedekleyin, ard\u0131ndan m\u00fcmk\u00fcnse <code>systemctl edit<\/code> ile dar kapsaml\u0131 bir override olu\u015fturun. Uygulaman\u0131n nas\u0131l ba\u015flat\u0131ld\u0131\u011f\u0131n\u0131 de\u011fi\u015ftiren her d\u00fczenlemenin geri d\u00f6n\u00fc\u015f\u00fcn\u00fc not edin.<\/p>\n<\/div>\n<h2><span id=\"Journal_kayitlarinda_gercek_hatayi_bulun\">Journal kay\u0131tlar\u0131nda ger\u00e7ek hatay\u0131 bulun<\/span><\/h2>\n<p>Servis durumundaki son birka\u00e7 sat\u0131r \u00e7o\u011fu zaman yeterli de\u011fildir. Ba\u015flang\u0131\u00e7 denemelerinin tamam\u0131n\u0131 zaman bilgisiyle birlikte inceleyin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo journalctl -u ornek-servis.service -b --no-pager -n 200<\/code><\/pre>\n<p><code>-b<\/code> mevcut sistem a\u00e7\u0131l\u0131\u015f\u0131ndaki kay\u0131tlarla s\u0131n\u0131rlar, <code>-n 200<\/code> ise son 200 sat\u0131r\u0131 getirir. Sorun \u00f6nceki a\u00e7\u0131l\u0131\u015fta ba\u015flad\u0131ysa <code>-b -1<\/code> ile bir \u00f6nceki a\u00e7\u0131l\u0131\u015fa bakabilirsiniz. Belirli bir zaman aral\u0131\u011f\u0131n\u0131 filtrelemek i\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo journalctl -u ornek-servis.service --since &quot;30 minutes ago&quot; --no-pager<\/code><\/pre>\n<p>Kay\u0131tlar\u0131 okurken systemd&#8217;nin servis ba\u015flat\u0131ld\u0131 mesaj\u0131ndan \u00f6nce veya sonra gelen uygulama sat\u0131rlar\u0131na odaklan\u0131n. \u00d6rne\u011fin <code>address already in use<\/code> portun ba\u015fka bir s\u00fcre\u00e7te oldu\u011funu, <code>permission denied<\/code> dosya veya dizin eri\u015fiminin reddedildi\u011fini, <code>no such file or directory<\/code> ise komutun, \u00e7al\u0131\u015fma dizininin veya beklenen dosyan\u0131n bulunamad\u0131\u011f\u0131n\u0131 g\u00f6sterebilir.<\/p>\n<h3><span id=\"Cikis_kodu_ve_sinyal_nasil_yorumlanir\">\u00c7\u0131k\u0131\u015f kodu ve sinyal nas\u0131l yorumlan\u0131r?<\/span><\/h3>\n<p><code>status=1\/FAILURE<\/code> gibi bir de\u011fer, uygulaman\u0131n hata koduyla \u00e7\u0131kt\u0131\u011f\u0131n\u0131 g\u00f6sterir; fakat tek ba\u015f\u0131na hatan\u0131n nedenini s\u00f6ylemez. Hata kodunu uygulaman\u0131n kendi dok\u00fcmantasyonu ve journal sat\u0131rlar\u0131yla e\u015fle\u015ftirin. <code>status=0\/SUCCESS<\/code> g\u00f6r\u00fclmesine ra\u011fmen servis yeniden ba\u015fl\u0131yorsa uygulama kendisini normal bi\u00e7imde sonland\u0131r\u0131yor olabilir ve unit dosyas\u0131nda <code>Restart=always<\/code> bulunabilir.<\/p>\n<p><code>SIGTERM<\/code> veya <code>SIGINT<\/code>, kontroll\u00fc durdurma iste\u011fiyle uyumlu olabilir. <code>SIGKILL<\/code> ise zaman a\u015f\u0131m\u0131, d\u0131\u015far\u0131dan sonland\u0131rma veya bellek bask\u0131s\u0131 gibi nedenlerle ili\u015fkili olabilir. Kesin yorum i\u00e7in kernel kay\u0131tlar\u0131n\u0131 da kontrol edin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo journalctl -k --since &quot;30 minutes ago&quot; --no-pager | grep -Ei &quot;oom|out of memory|killed process&quot;<\/code><\/pre>\n<p>Bu komut bo\u015f sonu\u00e7 verirse bellek sorunu kesin olarak d\u0131\u015flanm\u0131\u015f olmaz; yaln\u0131zca kernel g\u00fcnl\u00fc\u011f\u00fcnde bu ifadelerin bulunmad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Servisin kendi uygulama loglar\u0131 ayr\u0131 bir dosyada tutuluyorsa o dosyan\u0131n izinlerini ve ayn\u0131 zaman aral\u0131\u011f\u0131n\u0131 da kontrol edin.<\/p>\n<h2><span id=\"Baslatma_komutunu_systemd_disindan_sinayin\">Ba\u015flatma komutunu systemd d\u0131\u015f\u0131ndan s\u0131nay\u0131n<\/span><\/h2>\n<p>Journal kayd\u0131nda uygulama hatas\u0131 g\u00f6r\u00fcn\u00fcyorsa en dar te\u015fhis, systemd&#8217;nin kulland\u0131\u011f\u0131 komutu ayn\u0131 kullan\u0131c\u0131 ve \u00e7al\u0131\u015fma diziniyle kontroll\u00fc olarak \u00e7al\u0131\u015ft\u0131rmakt\u0131r. \u00d6nce komutu <code>systemctl cat<\/code> \u00e7\u0131kt\u0131s\u0131ndan al\u0131n. Uygulamay\u0131 root olarak denemek yan\u0131lt\u0131c\u0131 olabilir; servis hangi kullan\u0131c\u0131yla \u00e7al\u0131\u015f\u0131yorsa ayn\u0131 kullan\u0131c\u0131y\u0131 kullan\u0131n.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo -u uygulama-kullanicisi sh -c &#039;cd \/srv\/ornek-uygulama &amp;&amp; exec \/usr\/bin\/ornek-uygulama --config \/etc\/ornek-uygulama\/config.yml&#039;<\/code><\/pre>\n<p>Bu \u00f6rnekte <code>uygulama-kullanicisi<\/code>, dizin ve komut sizin unit dosyan\u0131za g\u00f6re de\u011fi\u015ftirilmelidir. Canl\u0131 uygulamada veri yazan veya migration \u00e7al\u0131\u015ft\u0131ran bir komut kullanmay\u0131n; yaln\u0131zca normal ba\u015flatma komutunu uygun bak\u0131m plan\u0131 i\u00e7inde test edin. Komut interaktif ortam de\u011fi\u015fkenlerine ihtiya\u00e7 duyuyorsa systemd servisinde bu de\u011fi\u015fkenlerin tan\u0131ml\u0131 olup olmad\u0131\u011f\u0131n\u0131 ayr\u0131ca inceleyin.<\/p>\n<p>Terminalde ba\u015far\u0131s\u0131z olan bir komut uygulama hatas\u0131na i\u015faret eder; ancak terminalde \u00e7al\u0131\u015fan bir komutun systemd alt\u0131nda da \u00e7al\u0131\u015faca\u011f\u0131 varsay\u0131lmamal\u0131d\u0131r. \u0130ki \u00e7al\u0131\u015fma ortam\u0131 aras\u0131ndaki farklar \u00e7o\u011funlukla \u015funlard\u0131r:<\/p>\n<ul>\n<li>Servis farkl\u0131 bir kullan\u0131c\u0131yla \u00e7al\u0131\u015f\u0131r ve dosya ya da socket eri\u015fimine sahip de\u011fildir.<\/li>\n<li><code>WorkingDirectory<\/code> beklenen dizin de\u011fildir; g\u00f6reli yollar yanl\u0131\u015f yere \u00e7\u00f6z\u00fcl\u00fcr.<\/li>\n<li>Shell profilinde bulunan <code>PATH<\/code>, <code>HOME<\/code> veya uygulama de\u011fi\u015fkenleri servise aktar\u0131lmaz.<\/li>\n<li>Gizli bilgiler veya yap\u0131land\u0131rma dosyalar\u0131 servis kullan\u0131c\u0131s\u0131 i\u00e7in okunabilir de\u011fildir.<\/li>\n<li>Terminalde \u00e7al\u0131\u015fan s\u00fcre\u00e7 portu zaten kullan\u0131yordur ve yeni systemd denemesi ayn\u0131 porta ba\u011flanamaz.<\/li>\n<\/ul>\n<p>Te\u015fhis amac\u0131yla t\u00fcm ortam\u0131 geni\u015fletmek yerine yaln\u0131zca uygulaman\u0131n ihtiya\u00e7 duydu\u011fu de\u011fi\u015fkenleri unit dosyas\u0131na veya bir <code>EnvironmentFile<\/code> dosyas\u0131na ekleyin. Secret dosyalar\u0131n\u0131n izinlerini geni\u015fletmek yerine servis kullan\u0131c\u0131s\u0131n\u0131n gerekli dosyay\u0131 okuyabildi\u011fini do\u011frulay\u0131n.<\/p>\n<h2><span id=\"Sik_gorulen_kok_nedenleri_daraltin\">S\u0131k g\u00f6r\u00fclen k\u00f6k nedenleri daralt\u0131n<\/span><\/h2>\n<h3><span id=\"Yanlis_ExecStart_veya_eksik_dosya\">Yanl\u0131\u015f ExecStart veya eksik dosya<\/span><\/h3>\n<p><code>ExecStart<\/code> sat\u0131r\u0131ndaki ikili dosya yolu, \u00e7al\u0131\u015fma dizini ve arg\u00fcmanlar birebir kontrol edilmelidir. Sanal ortamla kurulan Python uygulamalar\u0131nda sistemdeki farkl\u0131 Python yorumlay\u0131c\u0131s\u0131, Node.js uygulamalar\u0131nda farkl\u0131 Node yolu kullan\u0131labilir. Komutun mutlak yolunu ve dosyan\u0131n varl\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">command -v \/usr\/bin\/ornek-uygulama\nsudo -u uygulama-kullanicisi test -x \/usr\/bin\/ornek-uygulama\nsudo -u uygulama-kullanicisi test -r \/etc\/ornek-uygulama\/config.yml<\/code><\/pre>\n<p>Yanl\u0131\u015f yolu d\u00fczeltmeden \u00f6nce unit dosyas\u0131n\u0131n nereden geldi\u011fini belirleyin. Yaln\u0131zca eksik veya hatal\u0131 arg\u00fcman\u0131 de\u011fi\u015ftirin; \u00e7al\u0131\u015f\u0131r durumdaki di\u011fer kaynak y\u00f6netimi ayarlar\u0131n\u0131 ayn\u0131 anda de\u011fi\u015ftirmeyin.<\/p>\n<h3><span id=\"Port_cakismasi_ve_bagimlilik_sirasi\">Port \u00e7ak\u0131\u015fmas\u0131 ve ba\u011f\u0131ml\u0131l\u0131k s\u0131ras\u0131<\/span><\/h3>\n<p>Uygulama bir TCP portuna ba\u011flan\u0131rken <code>address already in use<\/code> veriyorsa \u00f6nce portu hangi s\u00fcrecin kulland\u0131\u011f\u0131n\u0131 bulun:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo ss -ltnp | grep &#039;:8080&#039;<\/code><\/pre>\n<p><code>8080<\/code> yerine uygulaman\u0131n ger\u00e7ek portunu yaz\u0131n. Portu kullanan s\u00fcre\u00e7 ayn\u0131 uygulaman\u0131n eski bir kopyas\u0131ysa onu rastgele sonland\u0131rmak yerine nas\u0131l ba\u015flat\u0131ld\u0131\u011f\u0131n\u0131 ve hangi unit taraf\u0131ndan y\u00f6netildi\u011fini belirleyin. Port ba\u015fka bir servis i\u00e7in ayr\u0131lm\u0131\u015fsa uygulama portunu de\u011fi\u015ftirmek yerine \u00e7ak\u0131\u015fan yap\u0131land\u0131rmay\u0131 de\u011ferlendirin.<\/p>\n<p>Veritaban\u0131, socket veya a\u011f servisi ba\u015flang\u0131\u00e7ta haz\u0131r de\u011filse uygulama birka\u00e7 kez ba\u015far\u0131s\u0131z olabilir. <code>After=<\/code> yaln\u0131zca ba\u015flatma s\u0131ras\u0131n\u0131 d\u00fczenler; bir servisin ger\u00e7ekten haz\u0131r oldu\u011funu garanti etmez. Uygulama haz\u0131r olma kontrol\u00fc destekliyorsa uygun bir health-check veya uygulaman\u0131n yeniden deneme davran\u0131\u015f\u0131 kullan\u0131lmal\u0131d\u0131r. S\u0131rf d\u00f6ng\u00fcy\u00fc gizlemek i\u00e7in uzun bir gecikme eklemek ba\u011f\u0131ml\u0131l\u0131k problemini \u00e7\u00f6zmez.<\/p>\n<h3><span id=\"Izinler_ve_calisma_dizini\">\u0130zinler ve \u00e7al\u0131\u015fma dizini<\/span><\/h3>\n<p>Unit dosyas\u0131nda <code>User=<\/code> tan\u0131ml\u0131ysa uygulama dosya sistemi eri\u015fimini o kullan\u0131c\u0131 \u00fczerinden yapar. Dizinlerin yaln\u0131zca dosya izinlerine de\u011fil, \u00fcst dizinlerdeki ge\u00e7i\u015f (<code>x<\/code>) iznine de ihtiyac\u0131 vard\u0131r. Te\u015fhis s\u0131ras\u0131nda a\u015fa\u011f\u0131daki komutla yolu inceleyin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">namei -l \/srv\/ornek-uygulama\/config.yml<\/code><\/pre>\n<p>Buldu\u011funuz tek dosya veya dizin i\u00e7in en dar izin d\u00fczeltmesini yap\u0131n. Yap\u0131land\u0131rmay\u0131 herkese okunabilir hale getirmek, \u00f6zellikle kimlik bilgileri i\u00e7eriyorsa, g\u00fcvenli bir \u00e7\u00f6z\u00fcm de\u011fildir. De\u011fi\u015fiklikten sonra ayn\u0131 servis kullan\u0131c\u0131s\u0131yla okuma testini tekrarlay\u0131n.<\/p>\n<h3><span id=\"FPM_CLI_ve_kuyruk_iscilerini_karistirmayin\">FPM, CLI ve kuyruk i\u015f\u00e7ilerini kar\u0131\u015ft\u0131rmay\u0131n<\/span><\/h3>\n<p>Bir web uygulamas\u0131nda PHP-FPM web i\u015f\u00e7ileri ile CLI \u00fczerinden \u00e7al\u0131\u015fan cron veya kuyruk i\u015f\u00e7ileri farkl\u0131 s\u00fcre\u00e7lerdir. HTTP isteklerini i\u015fleyen FPM i\u015f\u00e7ilerinin yeniden ba\u015flamas\u0131, CLI kuyruk i\u015f\u00e7isinin de ayn\u0131 nedenle durdu\u011fu anlam\u0131na gelmez. CLI i\u015fi HTTP \u00e7a\u011fr\u0131s\u0131 yapmad\u0131k\u00e7a FPM i\u015f\u00e7isi t\u00fcketmez.<\/p>\n<p>Bu ayr\u0131m, yanl\u0131\u015f unit \u00fczerinde te\u015fhis yapman\u0131z\u0131 engeller. Web isteklerinin hatas\u0131 i\u00e7in FPM unit loglar\u0131n\u0131; kuyruk veya zamanlanm\u0131\u015f i\u015f i\u00e7in ilgili CLI process, cron ya da worker unit kay\u0131tlar\u0131n\u0131 inceleyin. Zamanlay\u0131c\u0131 se\u00e7imi konusunda karar veriyorsan\u0131z <a href=\"https:\/\/www.dchost.com\/blog\/cron-mu-systemd-timer-mi-neden-nasil-ve-ne-zaman-hangisini-secmeli\/\">cron ve systemd Timer kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/a> yard\u0131mc\u0131 olabilir; ancak Timer ile \u00e7al\u0131\u015fan i\u015fin ba\u015far\u0131s\u0131zl\u0131\u011f\u0131, web servisinin restart d\u00f6ng\u00fcs\u00fcnden ayr\u0131 incelenmelidir.<\/p>\n<div class=\"aiw-note aiw-note-example\">\n<p class=\"aiw-box-title\">\u00d6rnek senaryo<\/p>\n<p>Varsayal\u0131m ki <code>app-worker.service<\/code> her 5 saniyede bir yeniden ba\u015fl\u0131yor ve journal kayd\u0131nda yap\u0131land\u0131rma dosyas\u0131n\u0131n bulunamad\u0131\u011f\u0131 yaz\u0131yor. Unit dosyas\u0131nda <code>WorkingDirectory=\/srv\/app\/current<\/code> tan\u0131ml\u0131, fakat sembolik ba\u011flant\u0131 yeni s\u00fcr\u00fcm da\u011f\u0131t\u0131m\u0131ndan sonra kald\u0131r\u0131lm\u0131\u015f. Bu durumda do\u011fru dar d\u00fczeltme, ge\u00e7erli s\u00fcr\u00fcm yolunu ve ba\u011flant\u0131n\u0131n hedefini geri y\u00fcklemektir; yaln\u0131zca <code>RestartSec=60<\/code> eklemek hatay\u0131 \u00e7\u00f6zmez. Bu, te\u015fhisi a\u00e7\u0131klamak i\u00e7in kurulmu\u015f bir \u00f6rnek senaryodur.<\/p>\n<\/div>\n<h2><span id=\"Restart_ayarini_ne_zaman_degistirmelisiniz\">Restart ayar\u0131n\u0131 ne zaman de\u011fi\u015ftirmelisiniz?<\/span><\/h2>\n<p><code>Restart=on-failure<\/code>, hata kodu veya beklenmeyen sinyal ile kapanan bir servisi yeniden ba\u015flat\u0131r. <code>Restart=always<\/code> ise normal \u00e7\u0131k\u0131\u015flarda bile tekrar ba\u015flatabilir. <code>RestartSec<\/code> iki deneme aras\u0131ndaki bekleme s\u00fcresini belirler. Bu ayarlar s\u00fcrekli \u00e7al\u0131\u015fan servislerde yararl\u0131 olabilir; fakat uygulama her ba\u015flang\u0131\u00e7ta ayn\u0131 hatay\u0131 veriyorsa s\u00fcrekli deneme loglar\u0131 b\u00fcy\u00fct\u00fcr ve k\u00f6k nedeni g\u00f6r\u00fcnmez k\u0131labilir.<\/p>\n<p>\u00d6nce uygulama hatas\u0131n\u0131 d\u00fczeltin. Ge\u00e7ici te\u015fhis s\u0131ras\u0131nda d\u00f6ng\u00fcy\u00fc durdurman\u0131z gerekiyorsa servis yap\u0131land\u0131rmas\u0131n\u0131 kal\u0131c\u0131 bi\u00e7imde de\u011fi\u015ftirmek yerine servisi durdurup journal kay\u0131tlar\u0131n\u0131 inceleyin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl stop ornek-servis.service\nsudo journalctl -u ornek-servis.service --since &quot;10 minutes ago&quot; --no-pager<\/code><\/pre>\n<p>Servisin otomatik olarak tekrar ba\u015flamas\u0131 i\u00e7in <code>Restart=<\/code> ayar\u0131n\u0131 de\u011fi\u015ftirecekseniz mevcut dosyan\u0131n yede\u011fini al\u0131n. \u00d6rne\u011fin yaln\u0131zca servis hata ile kapand\u0131\u011f\u0131nda yeniden ba\u015flamas\u0131 isteniyorsa <code>Restart=on-failure<\/code> daha dar bir tercih olabilir; bu karar uygulaman\u0131n beklenen \u00e7al\u0131\u015fma modeline ba\u011fl\u0131d\u0131r. De\u011fi\u015fikli\u011fin amac\u0131 ve geri d\u00f6n\u00fc\u015f komutu not edilmeden \u00fcretim sunucusunda d\u00fczenleme yapmay\u0131n.<\/p>\n<p>Bir\u00e7ok ba\u015far\u0131s\u0131z denemeden sonra systemd ba\u015flatmay\u0131 s\u0131n\u0131rlad\u0131ysa, k\u00f6k neden d\u00fczeltildikten sonra ba\u015far\u0131s\u0131z durum sayac\u0131n\u0131 temizleyebilirsiniz:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl reset-failed ornek-servis.service\nsudo systemctl start ornek-servis.service<\/code><\/pre>\n<p><code>reset-failed<\/code> yaln\u0131zca systemd&#8217;nin ba\u015far\u0131s\u0131zl\u0131k durumunu s\u0131f\u0131rlar. Uygulama h\u00e2l\u00e2 kapan\u0131yorsa servis tekrar failed durumuna d\u00fc\u015fer. Komuttan sonra en az birka\u00e7 yeniden ba\u015flatma aral\u0131\u011f\u0131n\u0131 g\u00f6zlemleyin.<\/p>\n<h2><span id=\"Duzeltmeyi_uygulayin_ve_dogrulayin\">D\u00fczeltmeyi uygulay\u0131n ve do\u011frulay\u0131n<\/span><\/h2>\n<p>Unit dosyas\u0131n\u0131 veya override&#8217;\u0131 de\u011fi\u015ftirdiyseniz systemd&#8217;nin yeni i\u00e7eri\u011fi okumas\u0131 gerekir:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl daemon-reload<\/code><\/pre>\n<p>Ard\u0131ndan servisi ba\u015flat\u0131n ve birden fazla kontrol yap\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">sudo systemctl restart ornek-servis.service\nsudo systemctl is-active ornek-servis.service\nsudo systemctl status ornek-servis.service --no-pager -l\nsudo journalctl -u ornek-servis.service --since &quot;2 minutes ago&quot; --no-pager<\/code><\/pre>\n<p><code>is-active<\/code> komutunun <code>active<\/code> d\u00f6nmesi tek ba\u015f\u0131na yeterli de\u011fildir. Uygulaman\u0131n beklenen porta ba\u011fland\u0131\u011f\u0131n\u0131, gerekli endpoint&#8217;in yan\u0131t verdi\u011fini ve journal&#8217;da yeni hata olmad\u0131\u011f\u0131n\u0131 da kontrol edin. D\u0131\u015far\u0131dan eri\u015filen bir web uygulamas\u0131nda uygulama loglar\u0131 ile web sunucusunun 4xx-5xx kay\u0131tlar\u0131 farkl\u0131 katmanlar\u0131 g\u00f6sterir; bunun i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/hosting-sunucu-loglarini-okumayi-ogrenin-apache-ve-nginx-ile-4xx-5xx\/\">Hosting sunucu loglar\u0131n\u0131 okuma<\/a> yakla\u015f\u0131m\u0131n\u0131 ayr\u0131ca kullanabilirsiniz.<\/p>\n<p>Yeni s\u00fcr\u00fcm da\u011f\u0131t\u0131m\u0131 s\u0131ras\u0131nda sorun \u00e7\u0131kt\u0131ysa unit dosyas\u0131n\u0131 d\u00fczeltmek yerine \u00f6nce bir \u00f6nceki bilinen s\u00fcr\u00fcme d\u00f6nmek daha g\u00fcvenli olabilir. Sembolik s\u00fcr\u00fcm dizinleri kullan\u0131yorsan\u0131z eski hedefin h\u00e2l\u00e2 mevcut oldu\u011funu, uygulama dosyalar\u0131n\u0131n ve yap\u0131land\u0131rman\u0131n birlikte uyumlu oldu\u011funu do\u011frulay\u0131n. Geri d\u00f6n\u00fc\u015ften sonra servis kararl\u0131 kal\u0131rsa yeni s\u00fcr\u00fcm\u00fcn ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ayr\u0131 bir bak\u0131m ad\u0131m\u0131nda inceleyin.<\/p>\n<p>WordPress veya Node.js gibi uygulamalarda systemd yaln\u0131zca ba\u015flatma katman\u0131d\u0131r. Uygulaman\u0131n kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131, release komutu ve proxy ayarlar\u0131 da kontrol edilmelidir. Canl\u0131ya alma s\u00fcrecini yeniden d\u00fczenliyorsan\u0131z <a href=\"https:\/\/www.dchost.com\/blog\/node-jsi-canliya-alirken-panik-yapma-pm2-systemd-nginx-ssl-ve-sifir\/\">PM2 ve systemd ile canl\u0131ya alma<\/a> yakla\u015f\u0131m\u0131n\u0131 mevcut servis tan\u0131m\u0131n\u0131zla kar\u015f\u0131la\u015ft\u0131r\u0131n; ayn\u0131 uygulamay\u0131 iki farkl\u0131 process manager&#8217;\u0131n birlikte y\u00f6netmedi\u011finden emin olun.<\/p>\n<h2><span id=\"Sik_Sorulan_Sorular\">S\u0131k Sorulan Sorular<\/span><\/h2>\n<h3><span id=\"systemd_servisi_neden_surekli_yeniden_basliyor_ama_status_active_gorunuyor\">systemd servisi neden s\u00fcrekli yeniden ba\u015fl\u0131yor ama status active g\u00f6r\u00fcn\u00fcyor?<\/span><\/h3>\n<p><code>status<\/code> anl\u0131k g\u00f6r\u00fcnt\u00fc verir. Komut \u00e7al\u0131\u015f\u0131rken s\u00fcre\u00e7 yeniden ba\u015flatma aral\u0131\u011f\u0131nda olabilir. <code>journalctl<\/code> kay\u0131tlar\u0131nda PID de\u011fi\u015fimini ve her ba\u015flang\u0131\u00e7 aras\u0131ndaki zamanlar\u0131 inceleyin.<\/p>\n<h3><span id=\"Restartalways_kullanmak_sorunu_cozer_mi\">Restart=always kullanmak sorunu \u00e7\u00f6zer mi?<\/span><\/h3>\n<p>Hay\u0131r. Bu ayar yaln\u0131zca kapanan s\u00fcreci yeniden \u00e7al\u0131\u015ft\u0131r\u0131r. Uygulama yanl\u0131\u015f yap\u0131land\u0131rma nedeniyle kapan\u0131yorsa ayn\u0131 hata tekrarlan\u0131r ve loglar h\u0131zla b\u00fcy\u00fcyebilir.<\/p>\n<h3><span id=\"Servis_manuel_basliyor_systemd_ile_neden_baslamiyor\">Servis manuel ba\u015fl\u0131yor, systemd ile neden ba\u015flam\u0131yor?<\/span><\/h3>\n<p>Manuel oturumdaki kullan\u0131c\u0131, \u00e7al\u0131\u015fma dizini, PATH ve ortam de\u011fi\u015fkenleri systemd servisinden farkl\u0131d\u0131r. Unit i\u00e7indeki <code>User<\/code>, <code>WorkingDirectory<\/code>, <code>ExecStart<\/code> ve environment tan\u0131mlar\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/p>\n<h3><span id=\"reset-failed_komutundan_sonra_servis_yine_durursa_ne_anlama_gelir\">reset-failed komutundan sonra servis yine durursa ne anlama gelir?<\/span><\/h3>\n<p>Ba\u015far\u0131s\u0131zl\u0131k sayac\u0131 temizlenmi\u015ftir; fakat ba\u015flang\u0131\u00e7 hatas\u0131 devam ediyordur. Yeni journal kayd\u0131ndaki ilk uygulama hatas\u0131n\u0131 inceleyerek te\u015fhise d\u00f6n\u00fcn.<\/p>\n<h2><span id=\"Son_kontrol_listesi\">Son kontrol listesi<\/span><\/h2>\n<ul>\n<li>Ger\u00e7ek unit ad\u0131n\u0131 ve etkin override dosyalar\u0131n\u0131 do\u011frulay\u0131n.<\/li>\n<li><code>systemctl status<\/code> ve <code>journalctl -u<\/code> \u00e7\u0131kt\u0131lar\u0131nda \u00e7\u0131k\u0131\u015f kodunu, sinyali ve ilk uygulama hatas\u0131n\u0131 bulun.<\/li>\n<li><code>ExecStart<\/code>, kullan\u0131c\u0131, \u00e7al\u0131\u015fma dizini, ortam dosyas\u0131 ve dosya izinlerini ayn\u0131 \u00e7al\u0131\u015fma ko\u015fullar\u0131yla test edin.<\/li>\n<li>Port \u00e7ak\u0131\u015fmas\u0131, ba\u011f\u0131ml\u0131l\u0131k s\u0131ras\u0131 ve bellek bask\u0131s\u0131 ihtimallerini ayr\u0131 ayr\u0131 kontrol edin.<\/li>\n<li>Uygulama hatas\u0131 \u00e7\u00f6z\u00fclmeden yaln\u0131zca <code>RestartSec<\/code> veya <code>Restart=<\/code> de\u011fi\u015ftirerek d\u00f6ng\u00fcy\u00fc gizlemeyin.<\/li>\n<li>De\u011fi\u015fiklikten \u00f6nce yede\u011fi ve geri d\u00f6n\u00fc\u015f yolunu saklay\u0131n; sonras\u0131nda <code>daemon-reload<\/code>, kontroll\u00fc ba\u015flatma ve journal do\u011frulamas\u0131 yap\u0131n.<\/li>\n<\/ul>\n<p>Bir sonraki ad\u0131m, servis durumunu ve son 200 journal sat\u0131r\u0131n\u0131 ayn\u0131 zaman aral\u0131\u011f\u0131nda inceleyip ilk ger\u00e7ek hata mesaj\u0131n\u0131 ay\u0131rmakt\u0131r. \u0130lk hata belirlendi\u011finde systemd ayar\u0131n\u0131 de\u011fil, o hatan\u0131n ait oldu\u011fu katman\u0131 d\u00fczeltin.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>systemd servisi s\u00fcrekli yeniden ba\u015fl\u0131yorsa k\u00f6k nedeni journalctl ve systemctl ile bulun; \u00e7\u0131k\u0131\u015f kodu, izin, port ve yap\u0131land\u0131rma sorunlar\u0131n\u0131 dar kapsaml\u0131 d\u00fczeltin.<\/p>\n","protected":false},"author":4,"featured_media":5800,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[637,636,638,123,635,95],"class_list":["post-5804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sunucu","tag-journalctl","tag-linux-sunucu","tag-servis-teshisi","tag-sunucu-yonetimi","tag-systemd","tag-vps"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/5804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=5804"}],"version-history":[{"count":1,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/5804\/revisions"}],"predecessor-version":[{"id":5806,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/5804\/revisions\/5806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/5800"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=5804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=5804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=5804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}