<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Dataweb Forum - Hosting & Sunucu]]></title>
		<link>https://dataweb.com.tr/forum/</link>
		<description><![CDATA[Dataweb Forum - https://dataweb.com.tr/forum]]></description>
		<pubDate>Sun, 06 Sep 2026 04:26:27 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Cron Job Çalışmıyor: Önce Neyi Kontrol Etmek Gerekir?]]></title>
			<link>https://dataweb.com.tr/forum/thread-46.html</link>
			<pubDate>Wed, 02 Sep 2026 13:07:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://dataweb.com.tr/forum/member.php?action=profile&uid=1">Kadir</a>]]></dc:creator>
			<guid isPermaLink="false">https://dataweb.com.tr/forum/thread-46.html</guid>
			<description><![CDATA[Cron görevi panelde kayıtlı görünüyor ama hiçbir şey olmuyorsa “cron çalışmıyor” demeden önce sorunu katman katman ayırmak gerekir.<br />
<br />
Amaç şu üç soruyu ayrı ayrı cevaplamak:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>1. Zamanlayıcı gerçekten tetikleniyor mu?
2. PHP/script gerçekten çalışabiliyor mu?
3. Script çalışıyor ama uygulama içinde mi hata veriyor?</code></div></div><br />
Aşağıdaki adımlar teknik bilmeyen birinin de sırayla uygulayabileceği şekilde hazırlanmıştır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1) Cron gerçekten tetikleniyor mu? En basit dosya testi</span><br />
<br />
Önce uygulamanızı hiç çalıştırmadan yalnız cron servisinin tetiklenip tetiklenmediğini test edin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yöntem A — PHP dosyasıyla test</span><br />
<br />
Dosya yöneticisinde sitenizin `public_html` klasörüne girin.<br />
<br />
Yeni bir dosya oluşturun:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cron-test.php</code></div></div><br />
İçine şunu yazın:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&lt;?php
file_put_contents(
    __DIR__ . '/cron-test.log',
    date('Y-m-d H:i:s') . PHP_EOL,
    FILE_APPEND
);</code></div></div><br />
Kaydedin.<br />
<br />
Şimdi hosting panelindeki Cron Jobs bölümünde geçici bir görev oluşturun.<br />
<br />
Örneğin panel PHP türünü kendisi seçtiriyorsa:<br />
- PHP sürümü: sitenizle aynı sürüm<br />
- dosya: `public_html/cron-test.php`<br />
- zamanlama: her 5 dakikada bir<br />
<br />
Özel komut kabul ediyorsa örnek mantık:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php /home/KULLANICI/public_html/cron-test.php</code></div></div><br />
Bazı hostinglerde PHP yolu farklı olabilir; aşağıdaki 2. bölümde bunu nasıl bulacağımızı anlatıyorum.<br />
<br />
5-10 dakika bekleyin.<br />
<br />
Dosya yöneticisini yenileyin.<br />
<br />
Şu dosya oluşmuş olmalı:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cron-test.log</code></div></div><br />
İçini açın.<br />
<br />
Örnek:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>2026-09-02 15:05:01
2026-09-02 15:10:01</code></div></div><br />
Bu satırlar oluşuyorsa cron zamanlayıcısı çalışıyor demektir. Artık sorun cron servisinde değil, asıl scriptinizdedir.<br />
<br />
Dosya hiç oluşmuyorsa:<br />
- komut yanlış,<br />
- PHP yolu yanlış,<br />
- dosya yolu yanlış,<br />
- cron henüz tetiklenmedi,<br />
- panel görevi kaydetmemiş<br />
<br />
olabilir.<br />
<br />
Test bitince `cron-test.php` ve `cron-test.log` dosyalarını silin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2) Panelin kullandığı PHP / CLI yolu doğru mu?</span><br />
<br />
Web sitesinin PHP sürümü ile cron’un kullandığı komut satırı PHP’si aynı olmayabilir.<br />
<br />
Örneğin web siteniz PHP 8.3 çalıştırırken cron:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php</code></div></div><br />
ile PHP 8.1 çalıştırıyor olabilir.<br />
<br />
Hostinger benzeri panellerde Cron Job oluştururken “PHP” seçeneği varsa panel çoğu zaman PHP çalıştırıcısının ilk kısmını otomatik getirir. Örneğin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/opt/alt/php83/usr/bin/lsphp</code></div></div><br />
veya sunucuya göre:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php</code></div></div><br />
görebilirsiniz.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nereden bakılır?</span><br />
<br />
Hosting paneli → Gelişmiş / Advanced → Cron Jobs / Cron Görevleri.<br />
<br />
Mevcut cron kaydının “Komut” alanını açın.<br />
<br />
Şuna benzer bir yapı görmelisiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>PHP_YOLU /home/KULLANICI/domains/site.com/public_html/script.php</code></div></div><br />
PHP yolunu ayrıca SSH erişiminiz varsa doğrulayabilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>php -v</code></div></div><br />
ve:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>which php</code></div></div><br />
Örnek çıktı:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>PHP 8.3.x (cli)
 /usr/bin/php</code></div></div><br />
Belirli bir yolu kontrol etmek için:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/opt/alt/php83/usr/bin/lsphp -v</code></div></div><br />
veya:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php -v</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">SSH yoksa ne yapacağız?</span><br />
<br />
Cron panelinin PHP seçeneğini kullanın. Panel PHP sürümü seçtiriyorsa elle farklı bir yol yazmak yerine önce o mekanizmayı tercih edin.<br />
<br />
Ayrıca geçici test dosyasına:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&lt;?php
file_put_contents(
    __DIR__.'/php-cron-info.txt',
    PHP_VERSION . ' | ' . PHP_SAPI
);</code></div></div><br />
yazıp cronla bir kez çalıştırabilirsiniz.<br />
<br />
Sonra `php-cron-info.txt` içinde cron’un gördüğü PHP sürümünü okuyabilirsiniz.<br />
<br />
Test dosyasını işiniz bitince silin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3) Script elle çalıştırıldığında hata veriyor mu?</span><br />
<br />
Cron’u devreden çıkarıp asıl PHP dosyasını manuel çalıştırmak çok değerlidir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">SSH varsa</span><br />
<br />
Önce klasöre gidin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd /home/KULLANICI/domains/site.com/public_html</code></div></div><br />
Sonra:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php yol/script.php</code></div></div><br />
veya hostingin doğru PHP yolu neyse:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/opt/alt/php83/usr/bin/lsphp yol/script.php</code></div></div><br />
Hata varsa terminalde görebilirsiniz.<br />
<br />
Komut bittikten sonra çıkış kodunu görmek için:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>echo &#36;?</code></div></div><br />
Genelde `0` başarılı çalışmayı ifade eder; farklı değer script veya çalıştırma hatasına işaret edebilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">SSH yoksa</span><br />
<br />
Scriptiniz güvenli şekilde web üzerinden çalıştırılmak üzere tasarlanmışsa geçici olarak tarayıcıdan açılabilir. Ancak cron dosyanız yönetim işlemi yapıyorsa herkese açık bırakmayın.<br />
<br />
Örneğin uygulamanız token destekliyorsa:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://site.com/cron.php?token=UZUN_GIZLI_TOKEN</code></div></div><br />
gibi korumalı bir test kullanılabilir.<br />
<br />
Token veya oturum kontrolü olmayan hassas cron dosyasını sırf test için herkese açık hale getirmeyin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4) Çalışma dizini yüzünden relative path kırılıyor mu?</span><br />
<br />
Web üzerinden çalışan kod:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>require 'app/bootstrap.php';</code></div></div><br />
ile çalışırken cron farklı klasörden başlatıldığında dosyayı bulamayabilir.<br />
<br />
Daha güvenli yaklaşım:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>require __DIR__ . '/app/bootstrap.php';</code></div></div><br />
veya dosya alt klasördeyse:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>require dirname(__DIR__) . '/app/bootstrap.php';</code></div></div><br />
Yani mümkün olduğunca `__DIR__` kullanın.<br />
<br />
Alternatif olarak cron komutunda önce klasöre geçebilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd /home/KULLANICI/domains/site.com/public_html &amp;&amp; /usr/bin/php yonetim/cron.php</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">5) Hata çıktısını log dosyasına nasıl yazdırırım?</span><br />
<br />
Cron paneli çıktıyı göstermiyorsa stdout ve stderr’i dosyaya yönlendirin.<br />
<br />
Örnek:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php /home/KULLANICI/public_html/cron.php &gt;&gt; /home/KULLANICI/cron-debug.log 2&gt;&amp;1</code></div></div><br />
Buradaki:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&gt;&gt;</code></div></div><br />
çıktıyı dosyanın sonuna ekler.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>2&gt;&amp;1</code></div></div><br />
hata çıktısını da aynı dosyaya gönderir.<br />
<br />
Tarih de görmek istiyorsanız:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>date &gt;&gt; /home/KULLANICI/cron-debug.log
/usr/bin/php /home/KULLANICI/public_html/cron.php &gt;&gt; /home/KULLANICI/cron-debug.log 2&gt;&amp;1</code></div></div><br />
Ancak hosting panelinde komut uzunluğu sınırı olabilir. Böyle durumda ayrı bir shell wrapper veya PHP içi loglama tercih edilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6) PHP error log nereden kontrol edilir?</span><br />
<br />
Hosting panelinde şu isimleri arayın:<br />
<br />
- Error Logs<br />
- PHP Errors<br />
- Logs<br />
- Hata Günlükleri<br />
<br />
Dosya yöneticisinde de şu dosyalar bulunabilir:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>error_log
php_error.log
logs/</code></div></div><br />
Hata zamanını cron’un çalışması gereken saatle karşılaştırın.<br />
<br />
Örneğin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>PHP Fatal error: Uncaught mysqli_sql_exception...</code></div></div><br />
gibi bir kayıt varsa cron tetikleniyor fakat uygulama veritabanında çöküyor olabilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7) Veritabanı bağlantısı neden cron’da farklı davranabilir?</span><br />
<br />
Web request ile CLI aynı ortam değildir.<br />
<br />
Kontrol edin:<br />
<br />
- `.env` veya config dosyası doğru yükleniyor mu?<br />
- dosya yolu relative mı?<br />
- DB host `localhost` mı farklı socket mi kullanıyor?<br />
- CLI kullanıcısının gerekli dosyalara erişimi var mı?<br />
- hosting güvenlik politikası CLI bağlantısını sınırlıyor mu?<br />
<br />
Basit test için uygulamanızın bootstrap dosyasını yükleyip:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>SELECT 1</code></div></div><br />
sorgusu çalıştıran geçici tanı sayfası hazırlanabilir.<br />
<br />
Üretim verisini değiştirmeyen salt-okunur test tercih edin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8) Kilit dosyası takılı kaldı mı?</span><br />
<br />
Aynı cron’un iki kez paralel çalışmasını önlemek için bazı scriptler lock file kullanır.<br />
<br />
Örnek:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>app/cron.lock
storage/cron.lock
/tmp/myapp-cron.lock</code></div></div><br />
Script başında kilit alınıyor ama hata sonrası bırakılmıyorsa sonraki tüm çağrılar “zaten çalışıyor” sanabilir.<br />
<br />
Kodu kontrol edin:<br />
- lock ne zaman oluşturuluyor?<br />
- `finally` içinde bırakılıyor mu?<br />
- eski lock için timeout var mı?<br />
<br />
Kilit dosyasını ne olduğunu bilmeden silmeyin. Önce scriptin gerçekten çalışmadığını doğrulayın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9) Cron’un kendisi uzun sürüyor veya timeout oluyor olabilir mi?</span><br />
<br />
Cron işi:<br />
- büyük API çağrısı,<br />
- çok sayıda veritabanı kaydı,<br />
- dış web taraması<br />
<br />
yapıyorsa çalışma süresi uzayabilir.<br />
<br />
Script içine aşama logları ekleyin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[15:00:01] started
[15:00:02] database ok
[15:00:04] api request started
[15:00:30] api request completed
[15:00:31] finished</code></div></div><br />
Log son olarak “api request started” satırında kalıyorsa sorunun hangi aşamada olduğunu anlarsınız.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10) Cron panelindeki boş çıktı ne anlama gelir?</span><br />
<br />
Boş ekran = kesinlikle “çalışmadı” değildir.<br />
<br />
Script:<br />
- hiç echo üretmiyor olabilir,<br />
- çıktıyı log dosyasına yönlendiriyor olabilir,<br />
- başarılı çalışıp sessiz bitiyor olabilir.<br />
<br />
Bu nedenle asıl kanıt:<br />
- heartbeat zamanı,<br />
- log satırı,<br />
- veritabanındaki son çalışma kaydı,<br />
- oluşturulan test dosyası<br />
<br />
gibi gözlemlenebilir bir sonuçtur.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11) Yeni başlayanlar için net teşhis sırası</span><br />
<br />
Aşağıdaki sırayı bozmayın:<br />
<br />
<ol type="1" class="mycode_list"><li>Basit `cron-test.php` ile tetikleme var mı?<br />
</li>
<li>Cron’un kullandığı PHP sürümü doğru mu?<br />
</li>
<li>Asıl script manuel çalışıyor mu?<br />
</li>
<li>Absolute path / `__DIR__` kullanılıyor mu?<br />
</li>
<li>Hata logu var mı?<br />
</li>
<li>Veritabanı bağlantısı çalışıyor mu?<br />
</li>
<li>Lock takılı mı?<br />
</li>
<li>Uzun işlem/timeout var mı?<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">12) Destek ekibine ne göndermeliyim?</span><br />
<br />
“Cron çalışmıyor” demek yerine şu bilgileri gönderin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Zamanlama:
*/15 * * * *

Komut:
PHP_YOLU /home/.../cron.php

PHP sürümü:
8.3

Basit tarih testi:
çalışıyor / çalışmıyor

Manuel çalıştırma:
başarılı / hata mesajı

Son log:
...

Son başarılı çalışma:
...</code></div></div><br />
Bu bilgiler sorunu çok daha hızlı daraltır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Güvenlik uyarısı</span><br />
<br />
Cron URL’nizde token varsa ekran görüntüsünde veya forum mesajında token’ın tamamını paylaşmayın. Şifre, veritabanı parolası, API anahtarı ve tam erişim tokenlarını mutlaka gizleyin.<br />
<br />
Sizde cron sorunu varsa ilk olarak 1. adımdaki `cron-test.php` testini yapın. Log dosyası oluşuyor mu, oluşmuyorsa paneldeki komutun yapısı nasıl? Gizli bilgileri kapatarak paylaşabilirsiniz.<br />
<br />
<span style="color: #999999;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">Dataweb editoryal sürüm: derin anlatım v1.0.0</span></span>]]></description>
			<content:encoded><![CDATA[Cron görevi panelde kayıtlı görünüyor ama hiçbir şey olmuyorsa “cron çalışmıyor” demeden önce sorunu katman katman ayırmak gerekir.<br />
<br />
Amaç şu üç soruyu ayrı ayrı cevaplamak:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>1. Zamanlayıcı gerçekten tetikleniyor mu?
2. PHP/script gerçekten çalışabiliyor mu?
3. Script çalışıyor ama uygulama içinde mi hata veriyor?</code></div></div><br />
Aşağıdaki adımlar teknik bilmeyen birinin de sırayla uygulayabileceği şekilde hazırlanmıştır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1) Cron gerçekten tetikleniyor mu? En basit dosya testi</span><br />
<br />
Önce uygulamanızı hiç çalıştırmadan yalnız cron servisinin tetiklenip tetiklenmediğini test edin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yöntem A — PHP dosyasıyla test</span><br />
<br />
Dosya yöneticisinde sitenizin `public_html` klasörüne girin.<br />
<br />
Yeni bir dosya oluşturun:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cron-test.php</code></div></div><br />
İçine şunu yazın:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&lt;?php
file_put_contents(
    __DIR__ . '/cron-test.log',
    date('Y-m-d H:i:s') . PHP_EOL,
    FILE_APPEND
);</code></div></div><br />
Kaydedin.<br />
<br />
Şimdi hosting panelindeki Cron Jobs bölümünde geçici bir görev oluşturun.<br />
<br />
Örneğin panel PHP türünü kendisi seçtiriyorsa:<br />
- PHP sürümü: sitenizle aynı sürüm<br />
- dosya: `public_html/cron-test.php`<br />
- zamanlama: her 5 dakikada bir<br />
<br />
Özel komut kabul ediyorsa örnek mantık:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php /home/KULLANICI/public_html/cron-test.php</code></div></div><br />
Bazı hostinglerde PHP yolu farklı olabilir; aşağıdaki 2. bölümde bunu nasıl bulacağımızı anlatıyorum.<br />
<br />
5-10 dakika bekleyin.<br />
<br />
Dosya yöneticisini yenileyin.<br />
<br />
Şu dosya oluşmuş olmalı:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cron-test.log</code></div></div><br />
İçini açın.<br />
<br />
Örnek:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>2026-09-02 15:05:01
2026-09-02 15:10:01</code></div></div><br />
Bu satırlar oluşuyorsa cron zamanlayıcısı çalışıyor demektir. Artık sorun cron servisinde değil, asıl scriptinizdedir.<br />
<br />
Dosya hiç oluşmuyorsa:<br />
- komut yanlış,<br />
- PHP yolu yanlış,<br />
- dosya yolu yanlış,<br />
- cron henüz tetiklenmedi,<br />
- panel görevi kaydetmemiş<br />
<br />
olabilir.<br />
<br />
Test bitince `cron-test.php` ve `cron-test.log` dosyalarını silin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2) Panelin kullandığı PHP / CLI yolu doğru mu?</span><br />
<br />
Web sitesinin PHP sürümü ile cron’un kullandığı komut satırı PHP’si aynı olmayabilir.<br />
<br />
Örneğin web siteniz PHP 8.3 çalıştırırken cron:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php</code></div></div><br />
ile PHP 8.1 çalıştırıyor olabilir.<br />
<br />
Hostinger benzeri panellerde Cron Job oluştururken “PHP” seçeneği varsa panel çoğu zaman PHP çalıştırıcısının ilk kısmını otomatik getirir. Örneğin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/opt/alt/php83/usr/bin/lsphp</code></div></div><br />
veya sunucuya göre:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php</code></div></div><br />
görebilirsiniz.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nereden bakılır?</span><br />
<br />
Hosting paneli → Gelişmiş / Advanced → Cron Jobs / Cron Görevleri.<br />
<br />
Mevcut cron kaydının “Komut” alanını açın.<br />
<br />
Şuna benzer bir yapı görmelisiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>PHP_YOLU /home/KULLANICI/domains/site.com/public_html/script.php</code></div></div><br />
PHP yolunu ayrıca SSH erişiminiz varsa doğrulayabilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>php -v</code></div></div><br />
ve:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>which php</code></div></div><br />
Örnek çıktı:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>PHP 8.3.x (cli)
 /usr/bin/php</code></div></div><br />
Belirli bir yolu kontrol etmek için:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/opt/alt/php83/usr/bin/lsphp -v</code></div></div><br />
veya:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php -v</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">SSH yoksa ne yapacağız?</span><br />
<br />
Cron panelinin PHP seçeneğini kullanın. Panel PHP sürümü seçtiriyorsa elle farklı bir yol yazmak yerine önce o mekanizmayı tercih edin.<br />
<br />
Ayrıca geçici test dosyasına:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&lt;?php
file_put_contents(
    __DIR__.'/php-cron-info.txt',
    PHP_VERSION . ' | ' . PHP_SAPI
);</code></div></div><br />
yazıp cronla bir kez çalıştırabilirsiniz.<br />
<br />
Sonra `php-cron-info.txt` içinde cron’un gördüğü PHP sürümünü okuyabilirsiniz.<br />
<br />
Test dosyasını işiniz bitince silin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3) Script elle çalıştırıldığında hata veriyor mu?</span><br />
<br />
Cron’u devreden çıkarıp asıl PHP dosyasını manuel çalıştırmak çok değerlidir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">SSH varsa</span><br />
<br />
Önce klasöre gidin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd /home/KULLANICI/domains/site.com/public_html</code></div></div><br />
Sonra:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php yol/script.php</code></div></div><br />
veya hostingin doğru PHP yolu neyse:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/opt/alt/php83/usr/bin/lsphp yol/script.php</code></div></div><br />
Hata varsa terminalde görebilirsiniz.<br />
<br />
Komut bittikten sonra çıkış kodunu görmek için:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>echo &#36;?</code></div></div><br />
Genelde `0` başarılı çalışmayı ifade eder; farklı değer script veya çalıştırma hatasına işaret edebilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">SSH yoksa</span><br />
<br />
Scriptiniz güvenli şekilde web üzerinden çalıştırılmak üzere tasarlanmışsa geçici olarak tarayıcıdan açılabilir. Ancak cron dosyanız yönetim işlemi yapıyorsa herkese açık bırakmayın.<br />
<br />
Örneğin uygulamanız token destekliyorsa:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://site.com/cron.php?token=UZUN_GIZLI_TOKEN</code></div></div><br />
gibi korumalı bir test kullanılabilir.<br />
<br />
Token veya oturum kontrolü olmayan hassas cron dosyasını sırf test için herkese açık hale getirmeyin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4) Çalışma dizini yüzünden relative path kırılıyor mu?</span><br />
<br />
Web üzerinden çalışan kod:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>require 'app/bootstrap.php';</code></div></div><br />
ile çalışırken cron farklı klasörden başlatıldığında dosyayı bulamayabilir.<br />
<br />
Daha güvenli yaklaşım:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>require __DIR__ . '/app/bootstrap.php';</code></div></div><br />
veya dosya alt klasördeyse:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>require dirname(__DIR__) . '/app/bootstrap.php';</code></div></div><br />
Yani mümkün olduğunca `__DIR__` kullanın.<br />
<br />
Alternatif olarak cron komutunda önce klasöre geçebilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd /home/KULLANICI/domains/site.com/public_html &amp;&amp; /usr/bin/php yonetim/cron.php</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">5) Hata çıktısını log dosyasına nasıl yazdırırım?</span><br />
<br />
Cron paneli çıktıyı göstermiyorsa stdout ve stderr’i dosyaya yönlendirin.<br />
<br />
Örnek:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>/usr/bin/php /home/KULLANICI/public_html/cron.php &gt;&gt; /home/KULLANICI/cron-debug.log 2&gt;&amp;1</code></div></div><br />
Buradaki:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&gt;&gt;</code></div></div><br />
çıktıyı dosyanın sonuna ekler.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>2&gt;&amp;1</code></div></div><br />
hata çıktısını da aynı dosyaya gönderir.<br />
<br />
Tarih de görmek istiyorsanız:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>date &gt;&gt; /home/KULLANICI/cron-debug.log
/usr/bin/php /home/KULLANICI/public_html/cron.php &gt;&gt; /home/KULLANICI/cron-debug.log 2&gt;&amp;1</code></div></div><br />
Ancak hosting panelinde komut uzunluğu sınırı olabilir. Böyle durumda ayrı bir shell wrapper veya PHP içi loglama tercih edilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6) PHP error log nereden kontrol edilir?</span><br />
<br />
Hosting panelinde şu isimleri arayın:<br />
<br />
- Error Logs<br />
- PHP Errors<br />
- Logs<br />
- Hata Günlükleri<br />
<br />
Dosya yöneticisinde de şu dosyalar bulunabilir:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>error_log
php_error.log
logs/</code></div></div><br />
Hata zamanını cron’un çalışması gereken saatle karşılaştırın.<br />
<br />
Örneğin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>PHP Fatal error: Uncaught mysqli_sql_exception...</code></div></div><br />
gibi bir kayıt varsa cron tetikleniyor fakat uygulama veritabanında çöküyor olabilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7) Veritabanı bağlantısı neden cron’da farklı davranabilir?</span><br />
<br />
Web request ile CLI aynı ortam değildir.<br />
<br />
Kontrol edin:<br />
<br />
- `.env` veya config dosyası doğru yükleniyor mu?<br />
- dosya yolu relative mı?<br />
- DB host `localhost` mı farklı socket mi kullanıyor?<br />
- CLI kullanıcısının gerekli dosyalara erişimi var mı?<br />
- hosting güvenlik politikası CLI bağlantısını sınırlıyor mu?<br />
<br />
Basit test için uygulamanızın bootstrap dosyasını yükleyip:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>SELECT 1</code></div></div><br />
sorgusu çalıştıran geçici tanı sayfası hazırlanabilir.<br />
<br />
Üretim verisini değiştirmeyen salt-okunur test tercih edin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8) Kilit dosyası takılı kaldı mı?</span><br />
<br />
Aynı cron’un iki kez paralel çalışmasını önlemek için bazı scriptler lock file kullanır.<br />
<br />
Örnek:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>app/cron.lock
storage/cron.lock
/tmp/myapp-cron.lock</code></div></div><br />
Script başında kilit alınıyor ama hata sonrası bırakılmıyorsa sonraki tüm çağrılar “zaten çalışıyor” sanabilir.<br />
<br />
Kodu kontrol edin:<br />
- lock ne zaman oluşturuluyor?<br />
- `finally` içinde bırakılıyor mu?<br />
- eski lock için timeout var mı?<br />
<br />
Kilit dosyasını ne olduğunu bilmeden silmeyin. Önce scriptin gerçekten çalışmadığını doğrulayın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9) Cron’un kendisi uzun sürüyor veya timeout oluyor olabilir mi?</span><br />
<br />
Cron işi:<br />
- büyük API çağrısı,<br />
- çok sayıda veritabanı kaydı,<br />
- dış web taraması<br />
<br />
yapıyorsa çalışma süresi uzayabilir.<br />
<br />
Script içine aşama logları ekleyin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[15:00:01] started
[15:00:02] database ok
[15:00:04] api request started
[15:00:30] api request completed
[15:00:31] finished</code></div></div><br />
Log son olarak “api request started” satırında kalıyorsa sorunun hangi aşamada olduğunu anlarsınız.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10) Cron panelindeki boş çıktı ne anlama gelir?</span><br />
<br />
Boş ekran = kesinlikle “çalışmadı” değildir.<br />
<br />
Script:<br />
- hiç echo üretmiyor olabilir,<br />
- çıktıyı log dosyasına yönlendiriyor olabilir,<br />
- başarılı çalışıp sessiz bitiyor olabilir.<br />
<br />
Bu nedenle asıl kanıt:<br />
- heartbeat zamanı,<br />
- log satırı,<br />
- veritabanındaki son çalışma kaydı,<br />
- oluşturulan test dosyası<br />
<br />
gibi gözlemlenebilir bir sonuçtur.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11) Yeni başlayanlar için net teşhis sırası</span><br />
<br />
Aşağıdaki sırayı bozmayın:<br />
<br />
<ol type="1" class="mycode_list"><li>Basit `cron-test.php` ile tetikleme var mı?<br />
</li>
<li>Cron’un kullandığı PHP sürümü doğru mu?<br />
</li>
<li>Asıl script manuel çalışıyor mu?<br />
</li>
<li>Absolute path / `__DIR__` kullanılıyor mu?<br />
</li>
<li>Hata logu var mı?<br />
</li>
<li>Veritabanı bağlantısı çalışıyor mu?<br />
</li>
<li>Lock takılı mı?<br />
</li>
<li>Uzun işlem/timeout var mı?<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">12) Destek ekibine ne göndermeliyim?</span><br />
<br />
“Cron çalışmıyor” demek yerine şu bilgileri gönderin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Zamanlama:
*/15 * * * *

Komut:
PHP_YOLU /home/.../cron.php

PHP sürümü:
8.3

Basit tarih testi:
çalışıyor / çalışmıyor

Manuel çalıştırma:
başarılı / hata mesajı

Son log:
...

Son başarılı çalışma:
...</code></div></div><br />
Bu bilgiler sorunu çok daha hızlı daraltır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Güvenlik uyarısı</span><br />
<br />
Cron URL’nizde token varsa ekran görüntüsünde veya forum mesajında token’ın tamamını paylaşmayın. Şifre, veritabanı parolası, API anahtarı ve tam erişim tokenlarını mutlaka gizleyin.<br />
<br />
Sizde cron sorunu varsa ilk olarak 1. adımdaki `cron-test.php` testini yapın. Log dosyası oluşuyor mu, oluşmuyorsa paneldeki komutun yapısı nasıl? Gizli bilgileri kapatarak paylaşabilirsiniz.<br />
<br />
<span style="color: #999999;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">Dataweb editoryal sürüm: derin anlatım v1.0.0</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hosting Seçerken Disk Alanından Daha Önemli Hangi Değerler Var?]]></title>
			<link>https://dataweb.com.tr/forum/thread-23.html</link>
			<pubDate>Thu, 20 Aug 2026 11:10:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://dataweb.com.tr/forum/member.php?action=profile&uid=1">Kadir</a>]]></dc:creator>
			<guid isPermaLink="false">https://dataweb.com.tr/forum/thread-23.html</guid>
			<description><![CDATA[Hosting paketleri çoğunlukla disk, site sayısı veya trafik gibi başlıklarla satılıyor. Gerçek performansı ise CPU limiti, RAM, I/O, inode, PHP worker, veritabanı kaynakları, cache ve destek kalitesi etkileyebiliyor.<br />
<br />
Ayrıca yedeklerin gerçekten geri yüklenebilir olması, staging imkânı ve kötü amaçlı yazılım taraması operasyon açısından kritik.<br />
<br />
Bir hosting sağlayıcısını değerlendirirken siz ilk olarak hangi teknik limiti soruyorsunuz? Paylaşımlı hostingden VPS’e geçiş kararını hangi sinyal veriyor?]]></description>
			<content:encoded><![CDATA[Hosting paketleri çoğunlukla disk, site sayısı veya trafik gibi başlıklarla satılıyor. Gerçek performansı ise CPU limiti, RAM, I/O, inode, PHP worker, veritabanı kaynakları, cache ve destek kalitesi etkileyebiliyor.<br />
<br />
Ayrıca yedeklerin gerçekten geri yüklenebilir olması, staging imkânı ve kötü amaçlı yazılım taraması operasyon açısından kritik.<br />
<br />
Bir hosting sağlayıcısını değerlendirirken siz ilk olarak hangi teknik limiti soruyorsunuz? Paylaşımlı hostingden VPS’e geçiş kararını hangi sinyal veriyor?]]></content:encoded>
		</item>
	</channel>
</rss>