{"id":30425,"date":"2025-09-27T17:32:07","date_gmt":"2025-09-27T14:32:07","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/"},"modified":"2025-09-27T17:32:07","modified_gmt":"2025-09-27T14:32:07","slug":"day-6-cron-job-100-days-of-devops","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/","title":{"rendered":"Day-6: Cron Job | 100 Days of DevOps"},"content":{"rendered":"<p><body><\/p>\n<p>DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job&#8217;un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, &#8220;100 G\u00fcn DevOps&#8221; serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron&#8217;u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, sunucular\u0131m\u0131z\u0131 ve uygulamalar\u0131m\u0131z\u0131 s\u00fcrekli olarak manuel i\u015flemlerle y\u00f6netmek hem zaman al\u0131c\u0131 hem de hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir. \u0130\u015fte tam da bu noktada otomasyonun \u00f6nemi belirginle\u015fir. Cron Job, Linux ve Unix benzeri i\u015fletim sistemlerinde belirli bir zaman \u00e7izelgesine g\u00f6re komutlar\u0131 veya betikleri otomatik olarak \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan, adeta bir dijital asistan g\u00f6revi g\u00f6ren g\u00fc\u00e7l\u00fc bir zamanlama servisidir. &#8220;Cron&#8221; kelimesi, Yunanca &#8220;zaman&#8221; anlam\u0131na gelen &#8220;chronos&#8221; kelimesinden t\u00fcremi\u015ftir, bu da arac\u0131n temel i\u015flevini do\u011frudan ifade eder: zamanlanm\u0131\u015f g\u00f6revleri y\u00f6netmek.<\/p>\n<p>DevOps felsefesi, geli\u015ftirme ve operasyon ekiplerini bir araya getirerek s\u00fcre\u00e7leri h\u0131zland\u0131rmay\u0131, verimlili\u011fi art\u0131rmay\u0131 ve s\u00fcrekli entegrasyon\/s\u00fcrekli teslimat (CI\/CD) d\u00f6ng\u00fclerini otomatikle\u015ftirmeyi hedefler. Cron Job, bu felsefenin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. Neden mi? \u00c7\u00fcnk\u00fc DevOps&#8217;un temel ta\u015flar\u0131ndan biri olan otomasyon, yaln\u0131zca kod da\u011f\u0131t\u0131m\u0131nda de\u011fil, ayn\u0131 zamanda sistem bak\u0131m\u0131, izleme, veri yedekleme ve raporlama gibi operasyonel g\u00f6revlerde de hayati rol oynar. \u00d6rne\u011fin, bir veritaban\u0131 yede\u011finin her gece al\u0131nmas\u0131, sistem loglar\u0131n\u0131n d\u00fczenli olarak temizlenmesi, uygulaman\u0131n belirli aral\u0131klarla sa\u011fl\u0131k kontrol\u00fcn\u00fcn yap\u0131lmas\u0131 veya performans metriklerinin toplanmas\u0131 gibi g\u00f6revler, Cron sayesinde otomatikle\u015ftirilebilir. Bu, operasyonel y\u00fck\u00fc azalt\u0131r, insan hatas\u0131n\u0131 minimize eder ve ekiplerin daha stratejik i\u015flere odaklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bir sistem y\u00f6neticisinin veya DevOps m\u00fchendisinin hayat\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. Her g\u00fcn belirli saatlerde y\u00fczlerce sunucuda log temizli\u011fi yapmak, veritaban\u0131 yedeklemek veya uygulama performans\u0131n\u0131 kontrol etmek, saatlerini alacak manuel bir i\u015f y\u00fck\u00fc olu\u015fturur. Ancak Cron Job ile bu g\u00f6revler bir kez ayarland\u0131ktan sonra, belirlenen periyotlarda otomatik olarak \u00e7al\u0131\u015f\u0131r. B\u00f6ylece, manuel m\u00fcdahaleye gerek kalmadan sistemin sa\u011fl\u0131\u011f\u0131 ve veri g\u00fcvenli\u011fi sa\u011flan\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131lara sahip \u015firketler i\u00e7in paha bi\u00e7ilmez bir avantajd\u0131r.<\/p>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu: Otomatik Yedekleme<\/strong><\/p>\n<p>Bir e-ticaret sitesinin veritaban\u0131n\u0131n her gece saat 03:00&#8217;te yedeklenmesi gerekti\u011fini varsayal\u0131m. Bu, m\u00fc\u015fteri verileri ve sipari\u015f bilgileri a\u00e7\u0131s\u0131ndan kritik bir g\u00f6revdir. Her g\u00fcn elle bu yede\u011fi almak yerine, bir Cron Job tan\u0131mlayarak bu s\u00fcreci tamamen otomatikle\u015ftirebiliriz. Cron, belirtilen saatte bir yedekleme beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r, yede\u011fi al\u0131r ve g\u00fcvenli bir depolama alan\u0131na ta\u015f\u0131r. Bu sayede, veri kayb\u0131 riski en aza indirilirken, operasyon ekibi de bu g\u00f6revin otomatik olarak halledildi\u011finden emin olabilir. Ayr\u0131ca, yedekleme i\u015flemi s\u0131ras\u0131nda olu\u015fabilecek hatalar da Cron&#8217;un \u00e7\u0131kt\u0131 y\u00f6netimi \u00f6zellikleri sayesinde ilgili ki\u015filere bildirilerek h\u0131zl\u0131 m\u00fcdahale imkan\u0131 sunar.<\/p>\n<p class=\"expert-tip\">Uzman \u0130pucu: Cron Job&#8217;lar\u0131 sadece tekil g\u00f6revler i\u00e7in de\u011fil, ayn\u0131 zamanda bir dizi beti\u011fi belirli bir s\u0131rayla \u00e7al\u0131\u015ft\u0131rmak i\u00e7in de kullanabilirsiniz. Bu, daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131 otomatikle\u015ftirmenize olanak tan\u0131r.<\/p>\n<p>\u00d6zetle, Cron Job, DevOps ara\u00e7 setinin temel bir par\u00e7as\u0131d\u0131r. Sistem otomasyonunu sa\u011flayarak, operasyonel verimlili\u011fi art\u0131r\u0131r, tekrarlayan g\u00f6revleri ortadan kald\u0131r\u0131r ve ekiplerin daha de\u011ferli i\u015flere odaklanmas\u0131n\u0131 sa\u011flar. Bu sayede, yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri \u00e7ok daha h\u0131zl\u0131, g\u00fcvenilir ve s\u00fcrd\u00fcr\u00fclebilir hale gelir.<\/p>\n<h2 id=\"crontab-dosyasi-nasil-yapilandirilir-ve-temel-cron-sozdizimi-nelerdir\">Crontab Dosyas\u0131 Nas\u0131l Yap\u0131land\u0131r\u0131l\u0131r ve Temel Cron S\u00f6zdizimi Nelerdir?<\/h2>\n<p>Cron Job&#8217;lar\u0131 yap\u0131land\u0131rmak i\u00e7in <code>crontab<\/code> ad\u0131 verilen \u00f6zel bir dosya kullan\u0131l\u0131r. Bu dosya, sistemin veya belirli bir kullan\u0131c\u0131n\u0131n zamanlanm\u0131\u015f g\u00f6revlerini i\u00e7erir. Her kullan\u0131c\u0131 kendi crontab dosyas\u0131na sahip olabilir ve bu dosyay\u0131 d\u00fczenleyerek kendi ki\u015fisel Cron Job&#8217;lar\u0131n\u0131 tan\u0131mlayabilir. Sistem genelindeki Cron Job&#8217;lar ise genellikle <code>\/etc\/crontab<\/code> veya <code>\/etc\/cron.d\/<\/code> dizini alt\u0131ndaki dosyalarda bulunur. \u015eimdi, crontab dosyas\u0131n\u0131n nas\u0131l y\u00f6netildi\u011fine ve temel s\u00f6zdizimine daha yak\u0131ndan bakal\u0131m.<\/p>\n<h3 id=\"crontab-dosyasini-yonetme-komutlari\">Crontab Dosyas\u0131n\u0131 Y\u00f6netme Komutlar\u0131<\/h3>\n<p>Bir kullan\u0131c\u0131n\u0131n crontab dosyas\u0131n\u0131 d\u00fczenlemek veya g\u00f6r\u00fcnt\u00fclemek i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullan\u0131r\u0131z:<\/p>\n<ul>\n<li><code>crontab -e<\/code>: Bu komut, ge\u00e7erli kullan\u0131c\u0131n\u0131n crontab dosyas\u0131n\u0131 d\u00fczenlemek i\u00e7in varsay\u0131lan metin d\u00fczenleyicisini (genellikle Vi veya Nano) a\u00e7ar. E\u011fer bir crontab dosyas\u0131 yoksa, yeni bir tane olu\u015fturur.<\/li>\n<li><code>crontab -l<\/code>: Bu komut, ge\u00e7erli kullan\u0131c\u0131n\u0131n mevcut t\u00fcm Cron Job&#8217;lar\u0131n\u0131 listeler. Bu, var olan g\u00f6revleri h\u0131zl\u0131ca kontrol etmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<li><code>crontab -r<\/code>: Bu komut, ge\u00e7erli kullan\u0131c\u0131n\u0131n t\u00fcm Cron Job&#8217;lar\u0131n\u0131 siler. Bu komutu kullan\u0131rken \u00e7ok dikkatli olmal\u0131s\u0131n\u0131z, \u00e7\u00fcnk\u00fc geri al\u0131namaz bir i\u015flemdir.<\/li>\n<li><code>crontab -i<\/code>: <code>-r<\/code> komutuyla birlikte kullan\u0131ld\u0131\u011f\u0131nda, silme i\u015fleminden \u00f6nce onay ister. Bu, yanl\u0131\u015fl\u0131kla silmeleri \u00f6nlemeye yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<p>Crontab dosyas\u0131n\u0131 d\u00fczenlerken, her bir Cron Job ayr\u0131 bir sat\u0131rda yer al\u0131r ve belirli bir s\u00f6zdizimine uyar. Bu s\u00f6zdizimi, g\u00f6revin ne zaman \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirleyen be\u015f zaman alan\u0131 ve ard\u0131ndan \u00e7al\u0131\u015ft\u0131r\u0131lacak komut veya betik yolundan olu\u015fur.<\/p>\n<h3 id=\"temel-cron-sozdizimi-ve-operatorler\">Temel Cron S\u00f6zdizimi ve Operat\u00f6rler<\/h3>\n<p>Bir Cron Job sat\u0131r\u0131 genel olarak \u015fu formatta yaz\u0131l\u0131r:<\/p>\n<pre><code>\n# .---------------- dakika (0 - 59)\n# |  .------------- saat (0 - 23)\n# |  |  .---------- ay\u0131n g\u00fcn\u00fc (1 - 31)\n# |  |  |  .------- ay (1 - 12) YA DA ocak, \u015fubat, ...\n# |  |  |  |  .---- haftan\u0131n g\u00fcn\u00fc (0 - 6) (Pazar=0 veya 7) YA DA paz, sal, ...\n# |  |  |  |  |\n# *  *  *  *  *  \u00e7al\u0131\u015ft\u0131r\u0131lacak_komut_veya_betik_yolu\n<\/pre>\n<p><\/code><\/p>\n<p>Her y\u0131ld\u0131z (*) i\u015fareti, ilgili zaman diliminde her birim (her dakika, her saat vb.) anlam\u0131na gelir. Bu be\u015f alanda kullanabilece\u011finiz baz\u0131 \u00f6zel operat\u00f6rler vard\u0131r:<\/p>\n<ul>\n<li><strong><code>*<\/code> (Y\u0131ld\u0131z):<\/strong> T\u00fcm olas\u0131 de\u011ferleri temsil eder. \u00d6rne\u011fin, saat alan\u0131nda <code>*<\/code> kullanmak, her saat anlam\u0131na gelir.<\/li>\n<li><strong><code>,<\/code> (Virg\u00fcl):<\/strong> Bir listedeki birden fazla de\u011feri belirtmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, <code>1,15,30<\/code> dakikalar alan\u0131nda kullan\u0131ld\u0131\u011f\u0131nda, 1., 15. ve 30. dakikalarda \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirtir.<\/li>\n<li><strong><code>-<\/code> (Tire):<\/strong> Bir aral\u0131k belirtmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, <code>9-17<\/code> saat alan\u0131nda kullan\u0131ld\u0131\u011f\u0131nda, sabah 9'dan ak\u015fam 5'e kadar her saat anlam\u0131na gelir.<\/li>\n<li><strong><code>\/<\/code> (B\u00f6l\u00fc):<\/strong> Bir ad\u0131m aral\u0131\u011f\u0131 belirtmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, <code>*\/15<\/code> dakika alan\u0131nda kullan\u0131ld\u0131\u011f\u0131nda, her 15 dakikada bir (0, 15, 30, 45) anlam\u0131na gelir.<\/li>\n<\/ul>\n<h3 id=\"cron-s\u00f6zdizimi-\u00f6rnekleri\">Cron S\u00f6zdizimi \u00d6rnekleri<\/h3>\n<ol>\n<li><strong>Her saat ba\u015f\u0131 bir komutu \u00e7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n            <code>0 * * * * \/usr\/bin\/some_command.sh<\/code><br \/>\n            Bu, her saatin 0. dakikas\u0131nda (yani her saat ba\u015f\u0131) <code>\/usr\/bin\/some_command.sh<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Her g\u00fcn gece yar\u0131s\u0131 bir g\u00f6revi \u00e7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n            <code>0 0 * * * \/usr\/bin\/daily_backup.sh<\/code><br \/>\n            Bu, her g\u00fcn gece 00:00'da (0. saat, 0. dakika) <code>\/usr\/bin\/daily_backup.sh<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Hafta i\u00e7i her g\u00fcn saat 17:00'de bir rapor g\u00f6nderme:<\/strong><br \/>\n            <code>0 17 * * 1-5 \/usr\/bin\/send_report.sh<\/code><br \/>\n            Bu, hafta i\u00e7i (Pazartesi-Cuma, 1-5) her g\u00fcn saat 17:00'de <code>\/usr\/bin\/send_report.sh<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Ay\u0131n 1. ve 15. g\u00fcnlerinde saat 06:30'da veritaban\u0131 optimizasyonu yapma:<\/strong><br \/>\n            <code>30 6 1,15 * * \/usr\/bin\/db_optimize.sh<\/code><br \/>\n            Bu, ay\u0131n 1. ve 15. g\u00fcnlerinde sabah 06:30'da <code>\/usr\/bin\/db_optimize.sh<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Her 10 dakikada bir sistem sa\u011fl\u0131\u011f\u0131 kontrol\u00fc:<\/strong><br \/>\n            <code>*\/10 * * * * \/usr\/bin\/health_check.sh<\/code><br \/>\n            Bu, her 10 dakikada bir (0, 10, 20, 30, 40, 50. dakikalarda) <code>\/usr\/bin\/health_check.sh<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<\/ol>\n<p>Crontab dosyas\u0131n\u0131 kaydettikten sonra, Cron servisi de\u011fi\u015fiklikleri otomatik olarak alg\u0131lar ve belirtilen zamanlarda g\u00f6revleri \u00e7al\u0131\u015ft\u0131rmaya ba\u015flar. Herhangi bir hata durumunda, Cron genellikle kullan\u0131c\u0131n\u0131n e-posta adresine (varsa) bildirim g\u00f6nderir. Bu nedenle, cron job'lar\u0131n\u0131z\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 ve hatalar\u0131n\u0131 y\u00f6nlendirmek (<code>MAILTO<\/code> de\u011fi\u015fkeni ile) iyi bir uygulamad\u0131r.<\/p>\n<h2 id=\"cron-job-uygulamalari-gercek-dunya-senaryolari-ve-adim-adim-ornekler\">Cron Job Uygulamalar\u0131: Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Ad\u0131m Ad\u0131m \u00d6rnekler<\/h2>\n<p>Cron Job'lar, DevOps ve sistem y\u00f6netimi alan\u0131nda say\u0131s\u0131z otomasyon f\u0131rsat\u0131 sunar. \u0130\u015fte size g\u00fcnl\u00fck operasyonlarda s\u0131kl\u0131kla kar\u015f\u0131la\u015f\u0131lan \u00fc\u00e7 farkl\u0131 senaryo ve bunlar\u0131 Cron ile nas\u0131l otomatikle\u015ftirebilece\u011finizi g\u00f6steren ad\u0131m ad\u0131m \u00f6rnekler.<\/p>\n<h3 id=\"otomatik-veritabani-yedeklemesi-nasil-yapilir\">Otomatik Veritaban\u0131 Yedeklemesi Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>Veritaban\u0131 yedeklemesi, herhangi bir sistemin en kritik operasyonlar\u0131ndan biridir. Veri kayb\u0131, i\u015fletmeler i\u00e7in felaketle sonu\u00e7lanabilir. Cron Job kullanarak d\u00fczenli ve otomatik yedekleme yapmak, bu riski \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<p><strong>Senaryo:<\/strong> Her g\u00fcn gece 02:00'de MySQL veritaban\u0131m\u0131z\u0131n yede\u011fini al\u0131p belirli bir klas\u00f6re kaydetmek ve 7 g\u00fcnden eski yedekleri otomatik olarak silmek.<\/p>\n<p><strong>Ad\u0131m 1: Yedekleme Beti\u011fini Olu\u015fturun<\/strong><\/p>\n<p>\u00d6ncelikle, yedekleme i\u015flemini yapacak bir shell beti\u011fi olu\u015ftural\u0131m. Bu betik, <code>mysqldump<\/code> komutunu kullanarak veritaban\u0131n\u0131n bir yede\u011fini alacak ve eski yedekleri temizleyecektir. \u00d6rne\u011fin, <code>\/home\/devops\/scripts\/backup_db.sh<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code>\n#!\/bin\/bash\n\n# Veritaban\u0131 ba\u011flant\u0131 bilgileri\nDB_USER=\"your_db_user\"\nDB_PASS=\"your_db_password\"\nDB_NAME=\"your_database_name\"\nBACKUP_DIR=\"\/var\/backups\/mysql\"\nDATE=$(date +\"%Y%m%d%H%M\")\nRETENTION_DAYS=7\n\n# Yedekleme dizini mevcut de\u011filse olu\u015ftur\nmkdir -p $BACKUP_DIR\n\n# Veritaban\u0131n\u0131 yedekle\nmysqldump -u$DB_USER -p$DB_PASS $DB_NAME > \"$BACKUP_DIR\/$DB_NAME-$DATE.sql\"\n\n# Yedekleme ba\u015far\u0131l\u0131 oldu mu kontrol et\nif [ $? -eq 0 ]; then\n  echo \"Veritaban\u0131 '$DB_NAME' yede\u011fi ba\u015far\u0131yla al\u0131nd\u0131: $BACKUP_DIR\/$DB_NAME-$DATE.sql\"\nelse\n  echo \"HATA: Veritaban\u0131 yedeklemesi ba\u015far\u0131s\u0131z oldu!\" >&2\n  exit 1\nfi\n\n# 7 g\u00fcnden eski yedekleri sil\nfind $BACKUP_DIR -name \"$DB_NAME-*.sql\" -mtime +$RETENTION_DAYS -exec rm {} \\;\necho \"7 g\u00fcnden eski yedekler temizlendi.\"\n<\/pre>\n<p><\/code><\/p>\n<p>Beti\u011fi kaydedin ve \u00e7al\u0131\u015ft\u0131r\u0131labilir izinlerini verin:<\/p>\n<pre><code>\nchmod +x \/home\/devops\/scripts\/backup_db.sh\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Ad\u0131m 2: Cron Job'\u0131 Yap\u0131land\u0131r\u0131n<\/strong><\/p>\n<p>\u015eimdi bu beti\u011fi her g\u00fcn saat 02:00'de \u00e7al\u0131\u015facak \u015fekilde Cron'a ekleyelim:<\/p>\n<pre><code>\ncrontab -e\n<\/pre>\n<p><\/code><\/p>\n<p>A\u00e7\u0131lan dosyaya a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code>\n0 2 * * * \/home\/devops\/scripts\/backup_db.sh >> \/var\/log\/mysql_backup.log 2>&1\n<\/pre>\n<p><\/code><\/p>\n<p>Bu girdi, her g\u00fcn saat 02:00'de <code>backup_db.sh<\/code> beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r ve \u00e7\u0131kt\u0131s\u0131n\u0131 (hem standart \u00e7\u0131kt\u0131 hem de hata \u00e7\u0131kt\u0131s\u0131) <code>\/var\/log\/mysql_backup.log<\/code> dosyas\u0131na y\u00f6nlendirir. Bu, yedekleme i\u015flemlerinin loglar\u0131n\u0131 takip etmek i\u00e7in \u00f6nemlidir.<\/p>\n<h3 id=\"sistem-log-temizligi-ve-bakimi-icin-cron-nasil-kullanilir\">Sistem Log Temizli\u011fi ve Bak\u0131m\u0131 \u0130\u00e7in Cron Nas\u0131l Kullan\u0131l\u0131r?<\/h3>\n<p>Log dosyalar\u0131, sistem ve uygulama sorunlar\u0131n\u0131 gidermek i\u00e7in paha bi\u00e7ilmez bilgiler i\u00e7erir ancak zamanla \u00e7ok b\u00fcy\u00fcyebilir ve disk alan\u0131n\u0131 doldurabilir. D\u00fczenli log temizli\u011fi ve ar\u015fivleme, sistem sa\u011fl\u0131\u011f\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p><strong>Senaryo:<\/strong> Haftal\u0131k olarak eski uygulama loglar\u0131n\u0131 s\u0131k\u0131\u015ft\u0131rmak ve 30 g\u00fcnden eski s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f loglar\u0131 silmek.<\/p>\n<p><strong>Ad\u0131m 1: Log Temizleme Beti\u011fini Olu\u015fturun<\/strong><\/p>\n<p><code>\/home\/devops\/scripts\/clean_logs.sh<\/code> ad\u0131nda bir betik olu\u015ftural\u0131m:<\/p>\n<pre><code>\n#!\/bin\/bash\n\nLOG_DIR=\"\/var\/log\/myapp\" # Uygulama loglar\u0131n\u0131n bulundu\u011fu dizin\nRETENTION_DAYS=30\n\necho \"--- Log Temizleme Ba\u015flang\u0131c\u0131: $(date) ---\"\n\n# Eski log dosyalar\u0131n\u0131 (3 g\u00fcnden eski) s\u0131k\u0131\u015ft\u0131r\nfind $LOG_DIR -name \"*.log\" -mtime +3 -exec gzip {} \\;\necho \"Eski log dosyalar\u0131 s\u0131k\u0131\u015ft\u0131r\u0131ld\u0131.\"\n\n# 30 g\u00fcnden eski s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f loglar\u0131 sil\nfind $LOG_DIR -name \"*.gz\" -mtime +$RETENTION_DAYS -exec rm {} \\;\necho \"30 g\u00fcnden eski s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f loglar temizlendi.\"\n\necho \"--- Log Temizleme Bitti: $(date) ---\"\n<\/pre>\n<p><\/code><\/p>\n<p>Beti\u011fi kaydedin ve \u00e7al\u0131\u015ft\u0131r\u0131labilir izinlerini verin:<\/p>\n<pre><code>\nchmod +x \/home\/devops\/scripts\/clean_logs.sh\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Ad\u0131m 2: Cron Job'\u0131 Yap\u0131land\u0131r\u0131n<\/strong><\/p>\n<p>Bu beti\u011fi her Pazar saat 03:00'te \u00e7al\u0131\u015facak \u015fekilde Cron'a ekleyelim:<\/p>\n<pre><code>\ncrontab -e\n<\/pre>\n<p><\/code><\/p>\n<p>A\u00e7\u0131lan dosyaya a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code>\n0 3 * * 0 \/home\/devops\/scripts\/clean_logs.sh >> \/var\/log\/app_log_clean.log 2>&1\n<\/pre>\n<p><\/code><\/p>\n<p>Bu, her hafta Pazar g\u00fcn\u00fc (0) saat 03:00'te log temizleme beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r ve \u00e7\u0131kt\u0131lar\u0131n\u0131 bir log dosyas\u0131na y\u00f6nlendirir.<\/p>\n<h3 id=\"basit-bir-web-sitesi-saglik-kontrolu-otomasyonu\">Basit Bir Web Sitesi Sa\u011fl\u0131k Kontrol\u00fc Otomasyonu<\/h3>\n<p>Bir web sitesinin eri\u015filebilirli\u011fini d\u00fczenli olarak kontrol etmek, potansiyel kesintileri erkenden tespit etmenizi sa\u011flar.<\/p>\n<p><strong>Senaryo:<\/strong> Her 15 dakikada bir web sitemizin HTTP 200 (OK) yan\u0131t verip vermedi\u011fini kontrol etmek. E\u011fer yan\u0131t 200 de\u011filse, bir e-posta bildirimi g\u00f6ndermek.<\/p>\n<p><strong>Ad\u0131m 1: Sa\u011fl\u0131k Kontrol\u00fc Beti\u011fini Olu\u015fturun<\/strong><\/p>\n<p><code>\/home\/devops\/scripts\/website_health_check.sh<\/code> ad\u0131nda bir betik olu\u015ftural\u0131m:<\/p>\n<pre><code>\n#!\/bin\/bash\n\nURL=\"https:\/\/your_website.com\"\nEMAIL=\"your_email@example.com\"\nSTATUS_CODE=$(curl -o \/dev\/null -s -w \"%{http_code}\\n\" $URL)\n\nif [ \"$STATUS_CODE\" -ne 200 ]; then\n  echo \"UYARI: $URL sitesi yan\u0131t vermiyor veya hata d\u00f6nd\u00fcr\u00fcyor! HTTP Kodu: $STATUS_CODE\" | mail -s \"Web Sitesi Durum Uyar\u0131s\u0131: $URL\" $EMAIL\n  echo \"$(date): HATA - $URL HTTP Kodu: $STATUS_CODE\" >> \/var\/log\/website_health.log\nelse\n  echo \"$(date): OK - $URL HTTP Kodu: $STATUS_CODE\" >> \/var\/log\/website_health.log\nfi\n<\/pre>\n<p><\/code><\/p>\n<p>Beti\u011fi kaydedin ve \u00e7al\u0131\u015ft\u0131r\u0131labilir izinlerini verin:<\/p>\n<pre><code>\nchmod +x \/home\/devops\/scripts\/website_health_check.sh\n<\/pre>\n<p><\/code><\/p>\n<p class=\"expert-tip\">Uzman \u0130pucu: <code>mail<\/code> komutunun \u00e7al\u0131\u015fabilmesi i\u00e7in sunucunuzda bir e-posta aktar\u0131m arac\u0131s\u0131 (MTA) y\u00fckl\u00fc ve yap\u0131land\u0131r\u0131lm\u0131\u015f olmal\u0131d\u0131r (\u00f6rn. Postfix, Sendmail).<\/p>\n<p><strong>Ad\u0131m 2: Cron Job'\u0131 Yap\u0131land\u0131r\u0131n<\/strong><\/p>\n<p>Bu beti\u011fi her 15 dakikada bir \u00e7al\u0131\u015facak \u015fekilde Cron'a ekleyelim:<\/p>\n<pre><code>\ncrontab -e\n<\/pre>\n<p><\/code><\/p>\n<p>A\u00e7\u0131lan dosyaya a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code>\n*\/15 * * * * \/home\/devops\/scripts\/website_health_check.sh\n<\/pre>\n<p><\/code><\/p>\n<p>Bu, her 15 dakikada bir web sitesi sa\u011fl\u0131k kontrol\u00fc beti\u011fini \u00e7al\u0131\u015ft\u0131r\u0131r. E\u011fer bir sorun olursa, betik otomatik olarak belirtilen e-posta adresine bir uyar\u0131 g\u00f6nderecektir.<\/p>\n<p>Bu \u00f6rnekler, Cron Job'lar\u0131n DevOps operasyonlar\u0131nda ne kadar esnek ve g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6stermektedir. Do\u011fru betiklerle birle\u015ftirildi\u011finde, Cron, tekrarlayan bir\u00e7ok g\u00f6revi otomatikle\u015ftirerek zaman ve emek tasarrufu sa\u011flar.<\/p>\n<h2 id=\"cron-job-yonetiminde-dikkat-edilmesi-gereken-ipuclari-ve-ileri-seviye-konular\">Cron Job Y\u00f6netiminde Dikkat Edilmesi Gereken \u0130pu\u00e7lar\u0131 ve \u0130leri Seviye Konular<\/h2>\n<p>Cron Job'lar\u0131 kurmak kolay olsa da, onlar\u0131 etkili ve sorunsuz bir \u015fekilde y\u00f6netmek baz\u0131 ileri d\u00fczey konular\u0131 ve en iyi uygulamalar\u0131 anlamay\u0131 gerektirir. \u0130\u015fte daha karma\u015f\u0131k senaryolar i\u00e7in \u00f6nemli ipu\u00e7lar\u0131 ve dikkat edilmesi gerekenler.<\/p>\n<h3 id=\"ortam-degiskenleri-ve-yol-ayarlari-path\">Ortam De\u011fi\u015fkenleri ve Yol Ayarlar\u0131 (PATH)<\/h3>\n<p>Cron ortam\u0131, genellikle normal shell oturumunuzdan daha k\u0131s\u0131tl\u0131 bir <code>PATH<\/code> de\u011fi\u015fkenine sahiptir. Bu, cron job i\u00e7inde \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z komutlar\u0131n tam yolunu belirtmedi\u011finizde \"command not found\" (komut bulunamad\u0131) hatalar\u0131 alman\u0131za neden olabilir. \u00d6rne\u011fin, bir betik i\u00e7inde <code>mysql<\/code> veya <code>php<\/code> gibi komutlar kullan\u0131yorsan\u0131z, bunlar\u0131n tam yolunu (\u00f6rn. <code>\/usr\/bin\/mysql<\/code>) belirtmeniz veya crontab dosyas\u0131n\u0131n ba\u015f\u0131na <code>PATH<\/code> de\u011fi\u015fkenini tan\u0131mlaman\u0131z gerekir:<\/p>\n<pre><code>\n# crontab dosyas\u0131n\u0131n ba\u015f\u0131na eklenecek \u00f6rnek\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin:\/usr\/games:\/usr\/local\/games:\/snap\/bin\n0 2 * * * \/usr\/bin\/mysqldump -u...\n<\/pre>\n<p><\/code><\/p>\n<p>Ayr\u0131ca, Cron Job'lar \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken genellikle kullan\u0131c\u0131n\u0131n profil dosyalar\u0131 (<code>.bashrc<\/code>, <code>.profile<\/code> vb.) y\u00fcklenmez, bu nedenle bu dosyalarda tan\u0131ml\u0131 olan \u00f6zel ortam de\u011fi\u015fkenleri Cron g\u00f6revlerinde kullan\u0131lamaz. Gerekli t\u00fcm ortam de\u011fi\u015fkenlerini beti\u011finizin i\u00e7inde veya crontab dosyas\u0131n\u0131n ba\u015f\u0131nda a\u00e7\u0131k\u00e7a tan\u0131mlaman\u0131z \u00f6nemlidir.<\/p>\n<h3 id=\"cikti-yonetimi-ve-bildirimler\">\u00c7\u0131kt\u0131 Y\u00f6netimi ve Bildirimler<\/h3>\n<p>Cron Job'lar\u0131n \u00e7\u0131kt\u0131s\u0131 (hem standart \u00e7\u0131kt\u0131 hem de hata \u00e7\u0131kt\u0131s\u0131) genellikle cron'u \u00e7al\u0131\u015ft\u0131ran kullan\u0131c\u0131n\u0131n e-posta adresine g\u00f6nderilir. Bu, hatalar\u0131 veya \u00f6nemli \u00e7\u0131kt\u0131lar\u0131 izlemek i\u00e7in faydal\u0131d\u0131r. Ancak, \u00e7ok s\u0131k \u00e7al\u0131\u015fan veya \u00e7ok fazla \u00e7\u0131kt\u0131 \u00fcreten g\u00f6revler e-posta kutunuzu doldurabilir. Bu durumu y\u00f6netmek i\u00e7in:<\/p>\n<ul>\n<li><strong>\u00c7\u0131kt\u0131y\u0131 Y\u00f6nlendirme:<\/strong> \u00c7\u0131kt\u0131y\u0131 bir dosyaya y\u00f6nlendirebilirsiniz: <code>\/path\/to\/command >> \/var\/log\/cron_output.log 2>&1<\/code>. Bu, hem standart \u00e7\u0131kt\u0131y\u0131 hem de hata \u00e7\u0131kt\u0131s\u0131n\u0131 belirtilen dosyaya yazar.<\/li>\n<li><strong>Bildirimleri Kapatma:<\/strong> E\u011fer bir Cron Job'dan e-posta almak istemiyorsan\u0131z, \u00e7\u0131kt\u0131s\u0131n\u0131 <code>\/dev\/null<\/code>'a y\u00f6nlendirebilirsiniz: <code>\/path\/to\/command > \/dev\/null 2>&1<\/code>.<\/li>\n<li><strong>\u00d6zel E-posta Adresi:<\/strong> Crontab dosyas\u0131n\u0131n ba\u015f\u0131na <code>MAILTO=\"your_email@example.com\"<\/code> ekleyerek t\u00fcm Cron Job \u00e7\u0131kt\u0131lar\u0131n\u0131n bu adrese g\u00f6nderilmesini sa\u011flayabilirsiniz.<\/li>\n<\/ul>\n<h3 id=\"kilit-mekanizmalari-ile-yaris-kosullarini-onleme-flock\">Kilit Mekanizmalar\u0131 ile Yar\u0131\u015f Ko\u015fullar\u0131n\u0131 \u00d6nleme (flock)<\/h3>\n<p>Baz\u0131 Cron Job'lar, \u00f6nceki \u00e7al\u0131\u015ft\u0131rma hen\u00fcz tamamlanmadan tekrar \u00e7al\u0131\u015fmaya ba\u015flayabilir. Bu \"yar\u0131\u015f ko\u015fulu\" (race condition), veri bozulmas\u0131na veya beklenmedik sonu\u00e7lara yol a\u00e7abilir. Bunu \u00f6nlemek i\u00e7in kilit mekanizmalar\u0131 kullanmak iyi bir uygulamad\u0131r. <code>flock<\/code> komutu bu ama\u00e7la kullan\u0131labilir.<\/p>\n<pre><code>\n# Her 5 dakikada bir \u00e7al\u0131\u015facak, ancak sadece bir \u00f6rnek \u00e7al\u0131\u015fabilir\n*\/5 * * * * \/usr\/bin\/flock -xn \/tmp\/my_cron.lock -c \"\/home\/devops\/scripts\/my_script.sh\" >> \/var\/log\/my_script.log 2>&1\n<\/pre>\n<p><\/code><\/p>\n<p>Burada:<\/p>\n<ul>\n<li><code>\/tmp\/my_cron.lock<\/code>: Kilit dosyas\u0131d\u0131r.<\/li>\n<li><code>-x<\/code>: \u00d6zel (exclusive) kilit anlam\u0131na gelir; ba\u015fka hi\u00e7bir <code>flock<\/code> i\u015flemi ayn\u0131 anda bu dosyay\u0131 kilitleyemez.<\/li>\n<li><code>-n<\/code>: Kilit al\u0131namazsa hemen \u00e7\u0131kar (non-blocking). Bu, \u00f6nceki \u00e7al\u0131\u015ft\u0131rma hala devam ediyorsa yeni \u00e7al\u0131\u015ft\u0131rman\u0131n ba\u015flamamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>-c<\/code>: Belirtilen komutu kilit alt\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<h3 id=\"ozel-zaman-etiketleri\">\u00d6zel Zaman Etiketleri<\/h3>\n<p>Cron'da be\u015f alanl\u0131 s\u00f6zdizimine ek olarak, s\u0131k kullan\u0131lan baz\u0131 zaman aral\u0131klar\u0131 i\u00e7in okunabilir etiketler de bulunur:<\/p>\n<ul>\n<li><code>@reboot<\/code>: Sistem her ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r.<\/li>\n<li><code>@yearly<\/code> veya <code>@annually<\/code>: Y\u0131lda bir kez (1 Ocak 00:00).<\/li>\n<li><code>@monthly<\/code>: Ayda bir kez (ay\u0131n 1. g\u00fcn\u00fc 00:00).<\/li>\n<li><code>@weekly<\/code>: Haftada bir kez (Pazar 00:00).<\/li>\n<li><code>@daily<\/code> veya <code>@midnight<\/code>: G\u00fcnde bir kez (00:00).<\/li>\n<li><code>@hourly<\/code>: Saatte bir kez (saat ba\u015f\u0131).<\/li>\n<\/ul>\n<pre><code>\n@daily \/home\/devops\/scripts\/daily_report.sh\n<\/pre>\n<p><\/code><\/p>\n<h3 id=\"mobil-uyumlu-html-icin-stil-ornegi\">Mobil Uyumlu HTML \u0130\u00e7in Stil \u00d6rne\u011fi<\/h3>\n<p>Her ne kadar Cron Job'lar sunucu taraf\u0131 otomasyonuyla ilgili olsa da, bir DevOps m\u00fchendisi olarak farkl\u0131 platformlar aras\u0131 uyumlulu\u011fun \u00f6nemini kavramak esast\u0131r. Bu makalenin i\u00e7eri\u011finin mobil cihazlarda da d\u00fczg\u00fcn g\u00f6r\u00fcnmesi i\u00e7in temel bir CSS medya sorgusu \u00f6rne\u011fi a\u015fa\u011f\u0131dad\u0131r. Bu, genel web i\u00e7eri\u011fi geli\u015ftirirken iyi bir pratik olarak d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n<style>\n        \/* Genel stil *\/\n        body { font-family: Arial, sans-serif; line-height: 1.6; }\n        .container { max-width: 960px; margin: 0 auto; padding: 20px; }\n        \/* Mobil cihazlar i\u00e7in stil *\/\n        @media (max-width: 768px) {\n            .container {\n                padding: 10px;\n            }\n            h2, h3 {\n                font-size: 1.2em;\n            }\n            p, li {\n                font-size: 0.9em;\n            }\n            \/* Code bloklar\u0131 i\u00e7in kayd\u0131rma *\/\n            pre {\n                overflow-x: auto;\n                white-space: pre-wrap;\n                word-wrap: break-word;\n            }\n        }\n    <\/style>\n<div class=\"mobile-warning\">\n<p>Yukar\u0131daki CSS kodu, bu HTML makalesinin mobil cihazlarda daha iyi bir okunabilirlik sa\u011flamas\u0131 i\u00e7in bir \u00f6rnektir. <code>@media (max-width: 768px)<\/code> sorgusu, ekran geni\u015fli\u011fi 768 piksel veya daha az oldu\u011funda farkl\u0131 stiller uygulayarak i\u00e7eri\u011fin mobil uyumlu hale gelmesini sa\u011flar. Bu, do\u011frudan Cron Job'larla ilgili olmasa da, modern web i\u00e7eri\u011fi sunumunun ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.<\/p>\n<\/p><\/div>\n<h2 id=\"cron-job-guvenligi-ve-en-iyi-uygulamalar-nelerdir\">Cron Job G\u00fcvenli\u011fi ve En \u0130yi Uygulamalar Nelerdir?<\/h2>\n<p>Cron Job'lar, sisteminizde otomatik g\u00f6revleri y\u00fcr\u00fctt\u00fc\u011f\u00fc i\u00e7in ciddi g\u00fcvenlik riskleri ta\u015f\u0131yabilirler e\u011fer do\u011fru bir \u015fekilde y\u00f6netilmezlerse. Bu nedenle, Cron Job'lar\u0131 yap\u0131land\u0131r\u0131rken g\u00fcvenlik en iyi uygulamalar\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak hayati \u00f6neme sahiptir. Ayr\u0131ca, daha modern DevOps ortamlar\u0131nda Cron'a alternatif olabilecek ara\u00e7lar\u0131 bilmek de ufkunuzu geni\u015fletecektir.<\/p>\n<h3 id=\"guvenlik-prensipleri\">G\u00fcvenlik Prensipleri<\/h3>\n<ul>\n<li><strong>Minimum Yetki Prensibi:<\/strong> Cron Job'lar\u0131 her zaman g\u00f6revlerini tamamlamak i\u00e7in gereken en az yetkiye sahip kullan\u0131c\u0131lar alt\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131n. \u00d6rne\u011fin, bir veritaban\u0131 yede\u011fi alan Cron Job'u root kullan\u0131c\u0131s\u0131 yerine, sadece veritaban\u0131na eri\u015fim yetkisi olan ayr\u0131 bir kullan\u0131c\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131rmak \u00e7ok daha g\u00fcvenlidir. Bu, potansiyel bir sald\u0131rgan\u0131n ele ge\u00e7irdi\u011fi bir Cron Job \u00fczerinden t\u00fcm sistemi ele ge\u00e7irmesini zorla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Betik \u0130zinleri ve Sahipli\u011fi:<\/strong> Cron Job'lar\u0131n \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131 betiklerin do\u011fru dosya izinlerine sahip oldu\u011fundan emin olun. Genellikle <code>chmod 700 \/path\/to\/script.sh<\/code> ile sadece beti\u011fin sahibi taraf\u0131ndan okunabilir ve \u00e7al\u0131\u015ft\u0131r\u0131labilir olmas\u0131n\u0131 sa\u011flamak en iyisidir. Betiklerin sahipli\u011fi de ilgili kullan\u0131c\u0131ya ait olmal\u0131d\u0131r.<\/li>\n<li><strong>Tam Yollar\u0131n Kullan\u0131m\u0131:<\/strong> \u00d6nceki b\u00f6l\u00fcmde bahsedildi\u011fi gibi, betiklerinizde ve Cron girdilerinizde komutlar\u0131n tam yolunu (\u00f6rn. <code>\/usr\/bin\/python<\/code> yerine <code>python<\/code>) kullanmak, <code>PATH<\/code> hijacking (yol korsanl\u0131\u011f\u0131) sald\u0131r\u0131lar\u0131n\u0131 \u00f6nler. K\u00f6t\u00fc niyetli bir kullan\u0131c\u0131, <code>PATH<\/code>'e kendi komutunu ekleyerek sizin bekledi\u011finizden farkl\u0131 bir program\u0131n \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilir.<\/li>\n<li><strong>Hassas Bilgilerin Y\u00f6netimi:<\/strong> Veritaban\u0131 \u015fifreleri veya API anahtarlar\u0131 gibi hassas bilgileri do\u011frudan Cron girdilerine veya betiklerin i\u00e7ine yazmaktan ka\u00e7\u0131n\u0131n. Bunun yerine, bu bilgileri g\u00fcvenli bir \u015fekilde ortam de\u011fi\u015fkenleri, \u015fifrelenmi\u015f dosyalarda (\u00f6rne\u011fin HashiCorp Vault gibi ara\u00e7larla) veya sistemin anahtar deposuyla y\u00f6netin.<\/li>\n<li><strong>\u00c7\u0131kt\u0131 Loglama ve \u0130zleme:<\/strong> T\u00fcm Cron Job'lar\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 bir log dosyas\u0131na y\u00f6nlendirin ve bu loglar\u0131 d\u00fczenli olarak g\u00f6zden ge\u00e7irin veya merkezi bir loglama sistemine (\u00f6rn. ELK Stack) g\u00f6nderin. Anomalileri veya hatalar\u0131 tespit etmek, g\u00fcvenlik sorunlar\u0131n\u0131n erken fark edilmesine yard\u0131mc\u0131 olabilir.<\/li>\n<\/ul>\n<h3 id=\"anacron-ve-crond-farki\">ANACRON ve CROND Fark\u0131<\/h3>\n<p><code>cron<\/code> servisi, sistemin s\u00fcrekli \u00e7al\u0131\u015f\u0131r durumda oldu\u011fu sunucular i\u00e7in tasarlanm\u0131\u015ft\u0131r. Belirlenen zamanda \u00e7al\u0131\u015fmayan bir Cron Job (\u00f6rne\u011fin sistem kapal\u0131yken) o zaman aral\u0131\u011f\u0131n\u0131 ka\u00e7\u0131r\u0131r ve bir sonraki zaman dilimine kadar \u00e7al\u0131\u015fmaz. Ancak masa\u00fcst\u00fc bilgisayarlar veya diz\u00fcst\u00fc bilgisayarlar gibi s\u00fcrekli a\u00e7\u0131k olmayan sistemler i\u00e7in bu bir sorun olabilir. \u0130\u015fte burada <code>anacron<\/code> devreye girer.<\/p>\n<ul>\n<li><strong><code>crond<\/code> (Cron Daemon):<\/strong> Belirtilen zamanlarda g\u00f6revleri y\u00fcr\u00fct\u00fcr. E\u011fer sistem g\u00f6rev zaman\u0131nda kapal\u0131ysa, o g\u00f6revi ka\u00e7\u0131r\u0131r.<\/li>\n<li><strong><code>anacron<\/code>:<\/strong> Ka\u00e7\u0131r\u0131lan g\u00f6revleri, sistem tekrar a\u00e7\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131r. Genellikle g\u00fcnl\u00fck, haftal\u0131k veya ayl\u0131k gibi daha uzun aral\u0131kl\u0131 g\u00f6revler i\u00e7in kullan\u0131l\u0131r. <code>anacron<\/code> g\u00f6revleri genellikle <code>\/etc\/anacrontab<\/code> dosyas\u0131nda tan\u0131mlan\u0131r ve sistem a\u00e7\u0131l\u0131\u015f\u0131nda <code>\/etc\/cron.daily<\/code>, <code>\/etc\/cron.weekly<\/code>, <code>\/etc\/cron.monthly<\/code> dizinlerindeki betikleri \u00e7al\u0131\u015ft\u0131rarak Cron'a entegre olur. Bu dizinlere yerle\u015ftirdi\u011finiz betikler, sistemin kapal\u0131 kald\u0131\u011f\u0131 s\u00fcreleri telafi ederek yine de \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.<\/li>\n<\/ul>\n<h3 id=\"alternatif-zamanlama-ve-otomasyon-araclari\">Alternatif Zamanlama ve Otomasyon Ara\u00e7lar\u0131<\/h3>\n<p>Modern DevOps d\u00fcnyas\u0131nda, Cron'un basitli\u011finin \u00f6tesine ge\u00e7en ve daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131, hata y\u00f6netimi, \u00f6l\u00e7eklenebilirlik ve merkezi y\u00f6netim sunan bir\u00e7ok alternatif ara\u00e7 bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>systemd timers:<\/strong> Linux sistemlerinde <code>systemd<\/code>'nin yerle\u015fik bir par\u00e7as\u0131d\u0131r. Cron'a g\u00f6re daha g\u00fc\u00e7l\u00fc, esnek ve g\u00fcvenilirdir. Sistem kaynaklar\u0131n\u0131 daha verimli kullan\u0131r, g\u00f6rev ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netebilir ve olay tabanl\u0131 tetikleyicilere sahiptir. Cron'un aksine, \u00e7\u0131kt\u0131y\u0131 standart loglama sistemi (journald) \u00fczerinden kolayca izlemenizi sa\u011flar.<\/li>\n<li><strong>Jenkins\/GitLab CI\/CD:<\/strong> Bu CI\/CD ara\u00e7lar\u0131, belirli bir zamanlamaya g\u00f6re (Cron benzeri s\u00f6zdizimi kullanarak) i\u015fleri tetikleyebilir. Bu sayede kod tabanl\u0131 i\u015f ak\u0131\u015flar\u0131 olu\u015fturabilir, versiyon kontrol sistemleriyle entegre edebilir ve merkezi olarak y\u00f6netebilirsiniz.<\/li>\n<li><strong>Rundeck\/Apache Airflow:<\/strong> Daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131 (DAG - Directed Acyclic Graph) ve ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi gerektiren otomasyon senaryolar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. B\u00fcy\u00fck veri i\u015fleme, veri ambar\u0131 g\u00fcncellemeleri veya \u00e7ok a\u015famal\u0131 da\u011f\u0131t\u0131m s\u00fcre\u00e7leri gibi g\u00f6revlerde Cron'un yetersiz kald\u0131\u011f\u0131 noktalarda \u00f6ne \u00e7\u0131karlar.<\/li>\n<li><strong>Kubernetes CronJobs:<\/strong> Konteynerle\u015ftirilmi\u015f uygulamalar i\u00e7in Kubernetes'in kendi i\u00e7inde Cron Job benzeri bir yap\u0131s\u0131 vard\u0131r. Bu, Kubernetes cluster'\u0131n\u0131zda belirli aral\u0131klarla bir pod'un \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar, bu da mikroservis tabanl\u0131 mimarilerde otomasyon i\u00e7in idealdir.<\/li>\n<\/ul>\n<p>Cron Job hala bir\u00e7ok temel otomasyon g\u00f6revi i\u00e7in ge\u00e7erli ve g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, altyap\u0131n\u0131z\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 ve ihtiya\u00e7lar\u0131n\u0131z artt\u0131k\u00e7a bu alternatifleri de\u011ferlendirmek, daha \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir bir DevOps ortam\u0131 olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2 id=\"sonuc-devops-yolculugunuzda-cronun-degeri-ve-gelecegi\">Sonu\u00e7: DevOps Yolculu\u011funuzda Cron'un De\u011feri ve Gelece\u011fi<\/h2>\n<p>DevOps'un 100 g\u00fcnl\u00fck ser\u00fcveninde, Day-6 olarak Cron Job'lara ay\u0131rd\u0131\u011f\u0131m\u0131z bu b\u00f6l\u00fcm, sistem otomasyonunun ne kadar temel ve g\u00fc\u00e7l\u00fc bir bile\u015feni oldu\u011funu a\u00e7\u0131k\u00e7a ortaya koymu\u015ftur. Sunucu tabanl\u0131 operasyonlarda, tekrarlayan g\u00f6revleri manuel olarak yapmak yerine Cron'a devretmek, hem zaman tasarrufu sa\u011flar hem de insan hatas\u0131 riskini minimize eder. Yedeklemelerden log temizli\u011fine, sa\u011fl\u0131k kontrollerinden raporlamaya kadar pek \u00e7ok kritik s\u00fcreci Cron ile otomatikle\u015ftirebilirsiniz. Basit s\u00f6zdizimi ve yayg\u0131n kullan\u0131labilirli\u011fi sayesinde, her DevOps m\u00fchendisinin ve sistem y\u00f6neticisinin ara\u00e7 kutusunda mutlaka bulunmas\u0131 gereken bir beceridir.<\/p>\n<p>Bununla birlikte, modern altyap\u0131lar ve s\u00fcrekli geli\u015fen teknoloji d\u00fcnyas\u0131, Cron'un s\u0131n\u0131rlar\u0131n\u0131 da beraberinde getirir. Daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131, merkezi y\u00f6netim ihtiya\u00e7lar\u0131, geli\u015fmi\u015f hata i\u015fleme veya bulut tabanl\u0131 ortamlar i\u00e7in <code>systemd timers<\/code>, CI\/CD ara\u00e7lar\u0131 veya Kubernetes CronJobs gibi daha sofistike alternatifler \u00f6ne \u00e7\u0131kmaktad\u0131r. Ancak bu durum, Cron'un de\u011ferini azaltmaz. Basit ve do\u011frudan otomasyon ihtiya\u00e7lar\u0131 i\u00e7in hala en h\u0131zl\u0131 ve en etkili \u00e7\u00f6z\u00fcmlerden biridir. \u00d6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projelerde, tekil sunucu ortamlar\u0131nda ve h\u0131zl\u0131 prototipleme a\u015famalar\u0131nda Cron, paha bi\u00e7ilmez bir yard\u0131mc\u0131 olmaya devam edecektir.<\/p>\n<p>\u00d6nemli olan, hangi arac\u0131 nerede ve ne zaman kullanaca\u011f\u0131n\u0131z\u0131 bilmektir. Cron'u etkin ve g\u00fcvenli bir \u015fekilde kullanma becerisi, DevOps yolculu\u011funuzda kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z otomasyon zorluklar\u0131n\u0131n \u00fcstesinden gelmenize yard\u0131mc\u0131 olacak temel bir yetkinliktir. Bu makalede ele ald\u0131\u011f\u0131m\u0131z temel kavramlar, uygulamal\u0131 \u00f6rnekler, ileri d\u00fczey ipu\u00e7lar\u0131 ve g\u00fcvenlik prensipleri sayesinde, Cron Job'lar\u0131 kendi projelerinizde ba\u015far\u0131yla uygulayabilece\u011finize inan\u0131yoruz.<\/p>\n<h3 id=\"sikca-sorulan-sorular\">S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>Cron Job'\u0131m neden \u00e7al\u0131\u015fm\u0131yor?<\/dt>\n<dd>Bunun birka\u00e7 nedeni olabilir:<\/p>\n<ul>\n<li><strong>Yol (PATH) sorunu:<\/strong> Beti\u011finizdeki veya komutlar\u0131n\u0131zdaki programlar\u0131n tam yolunu belirtmemi\u015f olabilirsiniz. Crontab dosyas\u0131n\u0131n ba\u015f\u0131na <code>PATH<\/code> de\u011fi\u015fkenini ekleyin veya komutlar\u0131n tam yolunu kullan\u0131n.<\/li>\n<li><strong>\u0130zinler:<\/strong> \u00c7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z beti\u011fin \u00e7al\u0131\u015ft\u0131r\u0131labilir iznine (<code>chmod +x script.sh<\/code>) sahip oldu\u011fundan emin olun.<\/li>\n<li><strong>Ortam De\u011fi\u015fkenleri:<\/strong> Beti\u011finizin ihtiya\u00e7 duydu\u011fu ortam de\u011fi\u015fkenlerinin Cron ortam\u0131nda ayarl\u0131 oldu\u011fundan emin olun.<\/li>\n<li><strong>\u00c7\u0131kt\u0131 Y\u00f6nlendirme:<\/strong> Komutun \u00e7\u0131kt\u0131s\u0131n\u0131 bir dosyaya y\u00f6nlendirin (<code>>> \/tmp\/cron.log 2>&1<\/code>) ve hatalar\u0131 kontrol edin.<\/li>\n<li><strong>S\u00f6zdizimi Hatas\u0131:<\/strong> Crontab giri\u015findeki zamanlama s\u00f6zdizimini dikkatlice kontrol edin.<\/li>\n<\/ul>\n<\/dd>\n<dt>Bir Cron Job'\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 nas\u0131l izlerim?<\/dt>\n<dd>\u00c7\u0131kt\u0131y\u0131 bir dosyaya y\u00f6nlendirebilirsiniz: <code>\/path\/to\/command >> \/var\/log\/my_cron_job.log 2>&1<\/code>. Ayr\u0131ca, <code>crontab<\/code> dosyas\u0131n\u0131n ba\u015f\u0131na <code>MAILTO=\"your_email@example.com\"<\/code> ekleyerek t\u00fcm \u00e7\u0131kt\u0131 ve hata mesajlar\u0131n\u0131n e-posta adresinize g\u00f6nderilmesini sa\u011flayabilirsiniz. Bu, \u00f6zellikle hata ay\u0131klama i\u00e7in \u00e7ok faydal\u0131d\u0131r.<\/dd>\n<dt>Bir Cron Job'\u0131n belirli bir kullan\u0131c\u0131 alt\u0131nda \u00e7al\u0131\u015fmas\u0131n\u0131 nas\u0131l sa\u011flar\u0131m?<\/dt>\n<dd>Bir kullan\u0131c\u0131 alt\u0131nda Cron Job olu\u015fturmak i\u00e7in o kullan\u0131c\u0131n\u0131n hesab\u0131na ge\u00e7i\u015f yap\u0131p (\u00f6rne\u011fin <code>su - username<\/code>) ard\u0131ndan <code>crontab -e<\/code> komutunu kullanman\u0131z yeterlidir. Bu, Cron Job'\u0131 ilgili kullan\u0131c\u0131n\u0131n yetkileriyle \u00e7al\u0131\u015ft\u0131racakt\u0131r. Sistem genelindeki <code>\/etc\/crontab<\/code> veya <code>\/etc\/cron.d\/<\/code> dosyalar\u0131nda ise, komut alan\u0131ndan \u00f6nce hangi kullan\u0131c\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirten bir alan bulunur.<\/dd>\n<dt>Cron Job'lar\u0131 versiyon kontrol\u00fc alt\u0131nda tutmak neden \u00f6nemlidir?<\/dt>\n<dd>T\u0131pk\u0131 uygulama kodlar\u0131 gibi, Cron Job'lar da bir sistemin davran\u0131\u015f\u0131n\u0131 tan\u0131mlar. Bunlar\u0131 Git gibi bir versiyon kontrol sisteminde tutmak, de\u011fi\u015fiklikleri izlemenizi, geri alman\u0131z\u0131, tak\u0131m arkada\u015flar\u0131n\u0131zla i\u015fbirli\u011fi yapman\u0131z\u0131 ve bir felaket durumunda sisteminizi kolayca yeniden kurman\u0131z\u0131 sa\u011flar. Bu, \"altyap\u0131 kod olarak\" (Infrastructure as Code) prensibinin bir par\u00e7as\u0131d\u0131r.<\/dd>\n<dt><code>@reboot<\/code> etiketi ne i\u015fe yarar?<\/dt>\n<dd><code>@reboot<\/code> etiketi, sistem her yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda (boot edildi\u011finde) belirtilen komutun veya beti\u011fin bir kez \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar. Bu, sistem ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak belirli servisleri ba\u015flatmak veya tek seferlik kurulum g\u00f6revlerini yerine getirmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. Ancak, sistemin ne zaman a\u00e7\u0131laca\u011f\u0131 kesin olmad\u0131\u011f\u0131 i\u00e7in, bu t\u00fcr g\u00f6revler i\u00e7in <code>systemd timers<\/code> gibi daha modern alternatifler daha fazla kontrol ve g\u00fcvenilirlik sunabilir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1400],"tags":[],"class_list":{"0":"post-30425","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-devops","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Day-6: Cron Job | 100 Days of DevOps<\/title>\n<meta name=\"description\" content=\"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job&#039;un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, &quot;100 G\u00fcn DevOps&quot; serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron&#039;u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Day-6: Cron Job | 100 Days of DevOps\" \/>\n<meta property=\"og:description\" content=\"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job&#039;un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, &quot;100 G\u00fcn DevOps&quot; serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron&#039;u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-27T14:32:07+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Day-6: Cron Job | 100 Days of DevOps\",\"datePublished\":\"2025-09-27T14:32:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\"},\"wordCount\":4208,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Devops\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\",\"name\":\"Day-6: Cron Job | 100 Days of DevOps\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-27T14:32:07+00:00\",\"description\":\"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job'un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, \\\"100 G\u00fcn DevOps\\\" serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron'u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Day-6: Cron Job | 100 Days of DevOps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Day-6: Cron Job | 100 Days of DevOps","description":"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job'un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, \"100 G\u00fcn DevOps\" serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron'u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/","og_locale":"tr_TR","og_type":"article","og_title":"Day-6: Cron Job | 100 Days of DevOps","og_description":"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job'un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, \"100 G\u00fcn DevOps\" serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron'u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.","og_url":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-27T14:32:07+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Day-6: Cron Job | 100 Days of DevOps","datePublished":"2025-09-27T14:32:07+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/"},"wordCount":4208,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Devops"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/","url":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/","name":"Day-6: Cron Job | 100 Days of DevOps","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-27T14:32:07+00:00","description":"DevOps yolculu\u011funuzda sistem otomasyonu ve d\u00fczenli g\u00f6rev y\u00f6netimi, verimlili\u011fin ve istikrar\u0131n anahtar\u0131d\u0131r. Peki, sunucular\u0131n\u0131zdaki bu tekrarlayan, s\u0131k\u0131c\u0131 g\u00f6revleri sizin yerinize kim \u00fcstlenecek? Cron Job tam da bu noktada devreye girerek, belirli zamanlarda otomatik olarak komutlar\u0131 ve betikleri \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir Linux\/Unix arac\u0131d\u0131r. Bu makalede, Cron Job'un temellerinden ba\u015flayarak, ger\u00e7ek d\u00fcnya senaryolar\u0131yla uygulamal\u0131 \u00f6rneklere, ileri seviye ipu\u00e7lar\u0131na ve g\u00fcvenlik yakla\u015f\u0131mlar\u0131na kadar her \u015feyi detayl\u0131ca inceleyece\u011fiz. Hedefimiz, \"100 G\u00fcn DevOps\" serisinin bu \u00f6nemli g\u00fcn\u00fcnde Cron'u tam anlam\u0131yla kavraman\u0131z\u0131 sa\u011flamak.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/day-6-cron-job-100-days-of-devops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Day-6: Cron Job | 100 Days of DevOps"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30425"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30425\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}