[{"data":1,"prerenderedAt":1417},["ShallowReactive",2],{"page-tr-\u002Fblog\u002Ffrequently-used-pm2-commands":3},{"id":4,"title":5,"body":6,"date":1405,"description":1406,"extension":1407,"meta":1408,"navigation":463,"path":1409,"seo":1410,"stem":1411,"tags":1412,"translation":1415,"__hash__":1416},"pages_tr\u002Ftr\u002Fblog\u002Ffrequently-used-pm2-commands.md","Sık Kullanılan PM2 Komutları",{"type":7,"value":8,"toc":1391},"minimark",[9,14,25,46,50,53,90,97,120,124,259,262,342,346,393,402,406,491,566,570,585,675,682,742,746,749,835,845,849,852,870,1010,1074,1077,1081,1091,1131,1135,1138,1172,1179,1207,1220,1224,1273,1276,1345,1349,1387],[10,11,13],"h2",{"id":12},"giriş","Giriş",[15,16,17,24],"p",{},[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Fpm2.keymetrics.io\u002F",[22],"nofollow","PM2",", Node.js uygulamaları için bir süreç yöneticisidir (process manager). Uygulamanızı arka planda çalıştırır, çökerse yeniden başlatır, logları toplar, birden fazla CPU çekirdeğine dağıtır ve sunucu yeniden başladığında uygulamaları otomatik olarak geri getirir. Sadece Node.js değil; Python, Bash ya da herhangi bir çalıştırılabilir dosyayı da yönetebilir.",[15,26,27,28,32,33,36,37,41,42,45],{},"Bu yazı günlük işte en çok ihtiyaç duyulan PM2 komutlarını kullanım sırasıyla topluyor. Örneklerde uygulama adı olarak ",[29,30,31],"code",{},"api"," kullanılıyor; komutlarda isim yerine ",[29,34,35],{},"pm2 list"," çıktısındaki ",[38,39,40],"strong",{},"id"," numarasını ya da tüm uygulamalar için ",[29,43,44],{},"all"," yazabilirsiniz.",[10,47,49],{"id":48},"_1-kurulum","1. Kurulum",[15,51,52],{},"PM2 global olarak kurulur:",[54,55,60],"pre",{"className":56,"code":57,"language":58,"meta":59,"style":59},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -g pm2\npm2 --version\n","bash","",[29,61,62,81],{"__ignoreMap":59},[63,64,67,71,75,78],"span",{"class":65,"line":66},"line",1,[63,68,70],{"class":69},"sBMFI","npm",[63,72,74],{"class":73},"sfazB"," install",[63,76,77],{"class":73}," -g",[63,79,80],{"class":73}," pm2\n",[63,82,84,87],{"class":65,"line":83},2,[63,85,86],{"class":69},"pm2",[63,88,89],{"class":73}," --version\n",[15,91,92,93,96],{},"PM2'yi güncelledikten sonra arka plandaki daemon'ın da yeni sürüme geçmesi için ",[29,94,95],{},"pm2 update"," çalıştırın; çalışan uygulamalar kaydedilip yeniden ayağa kaldırılır.",[54,98,100],{"className":56,"code":99,"language":58,"meta":59,"style":59},"npm install -g pm2@latest\npm2 update\n",[29,101,102,113],{"__ignoreMap":59},[63,103,104,106,108,110],{"class":65,"line":66},[63,105,70],{"class":69},[63,107,74],{"class":73},[63,109,77],{"class":73},[63,111,112],{"class":73}," pm2@latest\n",[63,114,115,117],{"class":65,"line":83},[63,116,86],{"class":69},[63,118,119],{"class":73}," update\n",[10,121,123],{"id":122},"_2-uygulama-başlatma","2. Uygulama başlatma",[54,125,127],{"className":56,"code":126,"language":58,"meta":59,"style":59},"pm2 start app.js                       # en basit hali\npm2 start app.js --name api            # anlamlı bir isim ver\npm2 start app.js --watch               # dosya değişince yeniden başlat (geliştirme için)\npm2 start app.js --max-memory-restart 300M   # bellek sınırı aşılırsa yeniden başlat\npm2 start app.js --cron-restart=\"0 3 * * *\"  # her gece 03:00'te yeniden başlat\npm2 start app.js --node-args=\"--max-old-space-size=4096\"\npm2 start app.js -- --port 8080        # \"--\" sonrası uygulamaya argüman olarak geçer\n",[29,128,129,143,160,175,193,217,237],{"__ignoreMap":59},[63,130,131,133,136,139],{"class":65,"line":66},[63,132,86],{"class":69},[63,134,135],{"class":73}," start",[63,137,138],{"class":73}," app.js",[63,140,142],{"class":141},"sHwdD","                       # en basit hali\n",[63,144,145,147,149,151,154,157],{"class":65,"line":83},[63,146,86],{"class":69},[63,148,135],{"class":73},[63,150,138],{"class":73},[63,152,153],{"class":73}," --name",[63,155,156],{"class":73}," api",[63,158,159],{"class":141},"            # anlamlı bir isim ver\n",[63,161,163,165,167,169,172],{"class":65,"line":162},3,[63,164,86],{"class":69},[63,166,135],{"class":73},[63,168,138],{"class":73},[63,170,171],{"class":73}," --watch",[63,173,174],{"class":141},"               # dosya değişince yeniden başlat (geliştirme için)\n",[63,176,178,180,182,184,187,190],{"class":65,"line":177},4,[63,179,86],{"class":69},[63,181,135],{"class":73},[63,183,138],{"class":73},[63,185,186],{"class":73}," --max-memory-restart",[63,188,189],{"class":73}," 300M",[63,191,192],{"class":141},"   # bellek sınırı aşılırsa yeniden başlat\n",[63,194,196,198,200,202,205,209,212,214],{"class":65,"line":195},5,[63,197,86],{"class":69},[63,199,135],{"class":73},[63,201,138],{"class":73},[63,203,204],{"class":73}," --cron-restart=",[63,206,208],{"class":207},"sMK4o","\"",[63,210,211],{"class":73},"0 3 * * *",[63,213,208],{"class":207},[63,215,216],{"class":141},"  # her gece 03:00'te yeniden başlat\n",[63,218,220,222,224,226,229,231,234],{"class":65,"line":219},6,[63,221,86],{"class":69},[63,223,135],{"class":73},[63,225,138],{"class":73},[63,227,228],{"class":73}," --node-args=",[63,230,208],{"class":207},[63,232,233],{"class":73},"--max-old-space-size=4096",[63,235,236],{"class":207},"\"\n",[63,238,240,242,244,246,249,252,256],{"class":65,"line":239},7,[63,241,86],{"class":69},[63,243,135],{"class":73},[63,245,138],{"class":73},[63,247,248],{"class":73}," --",[63,250,251],{"class":73}," --port",[63,253,255],{"class":254},"sbssI"," 8080",[63,257,258],{"class":141},"        # \"--\" sonrası uygulamaya argüman olarak geçer\n",[15,260,261],{},"npm script'i, başka bir dil ya da hazır bir komut da çalıştırabilirsiniz:",[54,263,265],{"className":56,"code":264,"language":58,"meta":59,"style":59},"pm2 start npm --name web -- start          # \"npm start\" çalıştırır\npm2 start \"npm run start\" --name web       # aynısı, tırnak içinde komut\npm2 start worker.py --interpreter python3  # Python script\npm2 start backup.sh --no-autorestart       # bir kere çalışıp bitsin\n",[29,266,267,288,309,327],{"__ignoreMap":59},[63,268,269,271,273,276,278,281,283,285],{"class":65,"line":66},[63,270,86],{"class":69},[63,272,135],{"class":73},[63,274,275],{"class":73}," npm",[63,277,153],{"class":73},[63,279,280],{"class":73}," web",[63,282,248],{"class":73},[63,284,135],{"class":73},[63,286,287],{"class":141},"          # \"npm start\" çalıştırır\n",[63,289,290,292,294,297,300,302,304,306],{"class":65,"line":83},[63,291,86],{"class":69},[63,293,135],{"class":73},[63,295,296],{"class":207}," \"",[63,298,299],{"class":73},"npm run start",[63,301,208],{"class":207},[63,303,153],{"class":73},[63,305,280],{"class":73},[63,307,308],{"class":141},"       # aynısı, tırnak içinde komut\n",[63,310,311,313,315,318,321,324],{"class":65,"line":162},[63,312,86],{"class":69},[63,314,135],{"class":73},[63,316,317],{"class":73}," worker.py",[63,319,320],{"class":73}," --interpreter",[63,322,323],{"class":73}," python3",[63,325,326],{"class":141},"  # Python script\n",[63,328,329,331,333,336,339],{"class":65,"line":177},[63,330,86],{"class":69},[63,332,135],{"class":73},[63,334,335],{"class":73}," backup.sh",[63,337,338],{"class":73}," --no-autorestart",[63,340,341],{"class":141},"       # bir kere çalışıp bitsin\n",[10,343,345],{"id":344},"_3-listeleme-ve-izleme","3. Listeleme ve izleme",[54,347,349],{"className":56,"code":348,"language":58,"meta":59,"style":59},"pm2 list               # tüm süreçler (kısaltmaları: pm2 ls, pm2 status)\npm2 show api           # tek süreç detayı: log yolları, restart sayısı, env, uptime\npm2 monit              # terminalde canlı CPU\u002Fbellek ve log paneli\npm2 jlist              # listeyi JSON olarak ver (script'ler için)\n",[29,350,351,361,373,383],{"__ignoreMap":59},[63,352,353,355,358],{"class":65,"line":66},[63,354,86],{"class":69},[63,356,357],{"class":73}," list",[63,359,360],{"class":141},"               # tüm süreçler (kısaltmaları: pm2 ls, pm2 status)\n",[63,362,363,365,368,370],{"class":65,"line":83},[63,364,86],{"class":69},[63,366,367],{"class":73}," show",[63,369,156],{"class":73},[63,371,372],{"class":141},"           # tek süreç detayı: log yolları, restart sayısı, env, uptime\n",[63,374,375,377,380],{"class":65,"line":162},[63,376,86],{"class":69},[63,378,379],{"class":73}," monit",[63,381,382],{"class":141},"              # terminalde canlı CPU\u002Fbellek ve log paneli\n",[63,384,385,387,390],{"class":65,"line":177},[63,386,86],{"class":69},[63,388,389],{"class":73}," jlist",[63,391,392],{"class":141},"              # listeyi JSON olarak ver (script'ler için)\n",[15,394,395,397,398,401],{},[29,396,35],{}," çıktısında ",[38,399,400],{},"↺"," sütunu restart sayısını gösterir. Bu sayı sürekli artıyorsa uygulama çöküp yeniden başlıyordur; sebebi için loglara bakın.",[10,403,405],{"id":404},"_4-durdurma-yeniden-başlatma-silme","4. Durdurma, yeniden başlatma, silme",[54,407,409],{"className":56,"code":408,"language":58,"meta":59,"style":59},"pm2 stop api           # durdur (listede kalır)\npm2 restart api        # durdur + başlat\npm2 reload api         # kesintisiz yeniden yükle (cluster modunda)\npm2 delete api         # durdur ve listeden kaldır\n\npm2 restart all\npm2 stop all\npm2 delete all\n",[29,410,411,423,435,447,459,465,474,482],{"__ignoreMap":59},[63,412,413,415,418,420],{"class":65,"line":66},[63,414,86],{"class":69},[63,416,417],{"class":73}," stop",[63,419,156],{"class":73},[63,421,422],{"class":141},"           # durdur (listede kalır)\n",[63,424,425,427,430,432],{"class":65,"line":83},[63,426,86],{"class":69},[63,428,429],{"class":73}," restart",[63,431,156],{"class":73},[63,433,434],{"class":141},"        # durdur + başlat\n",[63,436,437,439,442,444],{"class":65,"line":162},[63,438,86],{"class":69},[63,440,441],{"class":73}," reload",[63,443,156],{"class":73},[63,445,446],{"class":141},"         # kesintisiz yeniden yükle (cluster modunda)\n",[63,448,449,451,454,456],{"class":65,"line":177},[63,450,86],{"class":69},[63,452,453],{"class":73}," delete",[63,455,156],{"class":73},[63,457,458],{"class":141},"         # durdur ve listeden kaldır\n",[63,460,461],{"class":65,"line":195},[63,462,464],{"emptyLinePlaceholder":463},true,"\n",[63,466,467,469,471],{"class":65,"line":219},[63,468,86],{"class":69},[63,470,429],{"class":73},[63,472,473],{"class":73}," all\n",[63,475,476,478,480],{"class":65,"line":239},[63,477,86],{"class":69},[63,479,417],{"class":73},[63,481,473],{"class":73},[63,483,485,487,489],{"class":65,"line":484},8,[63,486,86],{"class":69},[63,488,453],{"class":73},[63,490,473],{"class":73},[492,493,494,510],"table",{},[495,496,497],"thead",{},[498,499,500,504,507],"tr",{},[501,502,503],"th",{},"Komut",[501,505,506],{},"Ne yapar",[501,508,509],{},"Ne zaman",[511,512,513,527,540,553],"tbody",{},[498,514,515,521,524],{},[516,517,518],"td",{},[29,519,520],{},"restart",[516,522,523],{},"Süreci öldürüp yeniden başlatır, kısa bir kesinti olur",[516,525,526],{},"Fork modu, config değişikliği",[498,528,529,534,537],{},[516,530,531],{},[29,532,533],{},"reload",[516,535,536],{},"Instance'ları tek tek yeniler, en az biri hep ayakta kalır",[516,538,539],{},"Cluster modunda deploy sonrası",[498,541,542,547,550],{},[516,543,544],{},[29,545,546],{},"stop",[516,548,549],{},"Süreci durdurur, ayarları listede tutar",[516,551,552],{},"Geçici olarak kapatmak",[498,554,555,560,563],{},[516,556,557],{},[29,558,559],{},"delete",[516,561,562],{},"Süreci durdurup listeden tamamen siler",[516,564,565],{},"Uygulamayı kaldırmak",[10,567,569],{"id":568},"_5-loglar","5. Loglar",[15,571,572,573,576,577,580,581,584],{},"PM2 her uygulamanın ",[29,574,575],{},"stdout"," ve ",[29,578,579],{},"stderr"," çıktısını varsayılan olarak ",[29,582,583],{},"~\u002F.pm2\u002Flogs\u002F"," altına yazar.",[54,586,588],{"className":56,"code":587,"language":58,"meta":59,"style":59},"pm2 logs               # tüm uygulamaların canlı logları\npm2 logs api           # sadece api\npm2 logs api --lines 200   # son 200 satır, sonra canlı akış\npm2 logs api --err     # sadece hata çıktısı\npm2 logs --nostream    # son satırları yaz ve çık\npm2 flush              # tüm log dosyalarını boşalt\npm2 flush api          # sadece api'nin loglarını boşalt\n",[29,589,590,600,611,628,642,654,664],{"__ignoreMap":59},[63,591,592,594,597],{"class":65,"line":66},[63,593,86],{"class":69},[63,595,596],{"class":73}," logs",[63,598,599],{"class":141},"               # tüm uygulamaların canlı logları\n",[63,601,602,604,606,608],{"class":65,"line":83},[63,603,86],{"class":69},[63,605,596],{"class":73},[63,607,156],{"class":73},[63,609,610],{"class":141},"           # sadece api\n",[63,612,613,615,617,619,622,625],{"class":65,"line":162},[63,614,86],{"class":69},[63,616,596],{"class":73},[63,618,156],{"class":73},[63,620,621],{"class":73}," --lines",[63,623,624],{"class":254}," 200",[63,626,627],{"class":141},"   # son 200 satır, sonra canlı akış\n",[63,629,630,632,634,636,639],{"class":65,"line":177},[63,631,86],{"class":69},[63,633,596],{"class":73},[63,635,156],{"class":73},[63,637,638],{"class":73}," --err",[63,640,641],{"class":141},"     # sadece hata çıktısı\n",[63,643,644,646,648,651],{"class":65,"line":195},[63,645,86],{"class":69},[63,647,596],{"class":73},[63,649,650],{"class":73}," --nostream",[63,652,653],{"class":141},"    # son satırları yaz ve çık\n",[63,655,656,658,661],{"class":65,"line":219},[63,657,86],{"class":69},[63,659,660],{"class":73}," flush",[63,662,663],{"class":141},"              # tüm log dosyalarını boşalt\n",[63,665,666,668,670,672],{"class":65,"line":239},[63,667,86],{"class":69},[63,669,660],{"class":73},[63,671,156],{"class":73},[63,673,674],{"class":141},"          # sadece api'nin loglarını boşalt\n",[15,676,677,678,681],{},"Loglar zamanla diski doldurabilir; ",[29,679,680],{},"pm2-logrotate"," modülü dosyaları boyuta göre döndürür ve eski dosyaları siler:",[54,683,685],{"className":56,"code":684,"language":58,"meta":59,"style":59},"pm2 install pm2-logrotate\npm2 set pm2-logrotate:max_size 10M     # dosya 10 MB olunca döndür\npm2 set pm2-logrotate:retain 7         # son 7 dosyayı sakla\npm2 set pm2-logrotate:compress true    # eski dosyaları gzip'le\n",[29,686,687,696,712,727],{"__ignoreMap":59},[63,688,689,691,693],{"class":65,"line":66},[63,690,86],{"class":69},[63,692,74],{"class":73},[63,694,695],{"class":73}," pm2-logrotate\n",[63,697,698,700,703,706,709],{"class":65,"line":83},[63,699,86],{"class":69},[63,701,702],{"class":73}," set",[63,704,705],{"class":73}," pm2-logrotate:max_size",[63,707,708],{"class":73}," 10M",[63,710,711],{"class":141},"     # dosya 10 MB olunca döndür\n",[63,713,714,716,718,721,724],{"class":65,"line":162},[63,715,86],{"class":69},[63,717,702],{"class":73},[63,719,720],{"class":73}," pm2-logrotate:retain",[63,722,723],{"class":254}," 7",[63,725,726],{"class":141},"         # son 7 dosyayı sakla\n",[63,728,729,731,733,736,739],{"class":65,"line":177},[63,730,86],{"class":69},[63,732,702],{"class":73},[63,734,735],{"class":73}," pm2-logrotate:compress",[63,737,738],{"class":207}," true",[63,740,741],{"class":141},"    # eski dosyaları gzip'le\n",[10,743,745],{"id":744},"_6-cluster-modu-ve-ölçekleme","6. Cluster modu ve ölçekleme",[15,747,748],{},"Node.js tek çekirdekte çalışır. Cluster modu, uygulamanın birden fazla kopyasını aynı port üzerinden çalıştırıp yükü çekirdeklere dağıtır — kodda değişiklik gerekmez.",[54,750,752],{"className":56,"code":751,"language":58,"meta":59,"style":59},"pm2 start app.js -i max --name api     # çekirdek sayısı kadar instance\npm2 start app.js -i 4 --name api       # 4 instance\npm2 scale api 2                        # instance sayısını 2'ye ayarla\npm2 scale api +2                       # 2 instance daha ekle\npm2 reload api                         # sıfır kesintiyle yenile\n",[29,753,754,775,795,810,824],{"__ignoreMap":59},[63,755,756,758,760,762,765,768,770,772],{"class":65,"line":66},[63,757,86],{"class":69},[63,759,135],{"class":73},[63,761,138],{"class":73},[63,763,764],{"class":73}," -i",[63,766,767],{"class":73}," max",[63,769,153],{"class":73},[63,771,156],{"class":73},[63,773,774],{"class":141},"     # çekirdek sayısı kadar instance\n",[63,776,777,779,781,783,785,788,790,792],{"class":65,"line":83},[63,778,86],{"class":69},[63,780,135],{"class":73},[63,782,138],{"class":73},[63,784,764],{"class":73},[63,786,787],{"class":254}," 4",[63,789,153],{"class":73},[63,791,156],{"class":73},[63,793,794],{"class":141},"       # 4 instance\n",[63,796,797,799,802,804,807],{"class":65,"line":162},[63,798,86],{"class":69},[63,800,801],{"class":73}," scale",[63,803,156],{"class":73},[63,805,806],{"class":254}," 2",[63,808,809],{"class":141},"                        # instance sayısını 2'ye ayarla\n",[63,811,812,814,816,818,821],{"class":65,"line":177},[63,813,86],{"class":69},[63,815,801],{"class":73},[63,817,156],{"class":73},[63,819,820],{"class":73}," +2",[63,822,823],{"class":141},"                       # 2 instance daha ekle\n",[63,825,826,828,830,832],{"class":65,"line":195},[63,827,86],{"class":69},[63,829,441],{"class":73},[63,831,156],{"class":73},[63,833,834],{"class":141},"                         # sıfır kesintiyle yenile\n",[836,837,838],"blockquote",{},[15,839,840,841,844],{},"Cluster modu uygulamanın ",[38,842,843],{},"stateless"," olmasını gerektirir: oturum, cache gibi verileri bellekte değil Redis ya da veritabanında tutun.",[10,846,848],{"id":847},"_7-ecosystem-dosyası","7. Ecosystem dosyası",[15,850,851],{},"Komut satırı parametreleri çoğaldıkça hepsini bir yapılandırma dosyasında toplamak daha düzenlidir. Örnek dosya oluşturmak için:",[54,853,855],{"className":56,"code":854,"language":58,"meta":59,"style":59},"pm2 init simple        # ecosystem.config.js oluşturur\n",[29,856,857],{"__ignoreMap":59},[63,858,859,861,864,867],{"class":65,"line":66},[63,860,86],{"class":69},[63,862,863],{"class":73}," init",[63,865,866],{"class":73}," simple",[63,868,869],{"class":141},"        # ecosystem.config.js oluşturur\n",[54,871,875],{"className":872,"code":873,"language":874,"meta":59,"style":59},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F ecosystem.config.js\nmodule.exports = {\n  apps: [\n    {\n      name: 'api',\n      script: '.\u002Fdist\u002Fserver.js',\n      instances: 'max',\n      exec_mode: 'cluster',\n      max_memory_restart: '300M',\n      env: {\n        NODE_ENV: 'development',\n        PORT: 3000,\n      },\n      env_production: {\n        NODE_ENV: 'production',\n        PORT: 8080,\n      },\n    },\n    {\n      name: 'worker',\n      script: '.\u002Fdist\u002Fworker.js',\n    },\n  ],\n};\n","js",[29,876,877,882,887,892,897,902,907,912,917,923,929,935,941,947,953,959,965,970,976,981,987,993,998,1004],{"__ignoreMap":59},[63,878,879],{"class":65,"line":66},[63,880,881],{},"\u002F\u002F ecosystem.config.js\n",[63,883,884],{"class":65,"line":83},[63,885,886],{},"module.exports = {\n",[63,888,889],{"class":65,"line":162},[63,890,891],{},"  apps: [\n",[63,893,894],{"class":65,"line":177},[63,895,896],{},"    {\n",[63,898,899],{"class":65,"line":195},[63,900,901],{},"      name: 'api',\n",[63,903,904],{"class":65,"line":219},[63,905,906],{},"      script: '.\u002Fdist\u002Fserver.js',\n",[63,908,909],{"class":65,"line":239},[63,910,911],{},"      instances: 'max',\n",[63,913,914],{"class":65,"line":484},[63,915,916],{},"      exec_mode: 'cluster',\n",[63,918,920],{"class":65,"line":919},9,[63,921,922],{},"      max_memory_restart: '300M',\n",[63,924,926],{"class":65,"line":925},10,[63,927,928],{},"      env: {\n",[63,930,932],{"class":65,"line":931},11,[63,933,934],{},"        NODE_ENV: 'development',\n",[63,936,938],{"class":65,"line":937},12,[63,939,940],{},"        PORT: 3000,\n",[63,942,944],{"class":65,"line":943},13,[63,945,946],{},"      },\n",[63,948,950],{"class":65,"line":949},14,[63,951,952],{},"      env_production: {\n",[63,954,956],{"class":65,"line":955},15,[63,957,958],{},"        NODE_ENV: 'production',\n",[63,960,962],{"class":65,"line":961},16,[63,963,964],{},"        PORT: 8080,\n",[63,966,968],{"class":65,"line":967},17,[63,969,946],{},[63,971,973],{"class":65,"line":972},18,[63,974,975],{},"    },\n",[63,977,979],{"class":65,"line":978},19,[63,980,896],{},[63,982,984],{"class":65,"line":983},20,[63,985,986],{},"      name: 'worker',\n",[63,988,990],{"class":65,"line":989},21,[63,991,992],{},"      script: '.\u002Fdist\u002Fworker.js',\n",[63,994,996],{"class":65,"line":995},22,[63,997,975],{},[63,999,1001],{"class":65,"line":1000},23,[63,1002,1003],{},"  ],\n",[63,1005,1007],{"class":65,"line":1006},24,[63,1008,1009],{},"};\n",[54,1011,1013],{"className":56,"code":1012,"language":58,"meta":59,"style":59},"pm2 start ecosystem.config.js                      # tüm uygulamaları başlat (env)\npm2 start ecosystem.config.js --env production     # env_production değişkenleriyle\npm2 start ecosystem.config.js --only api           # sadece api\npm2 reload ecosystem.config.js --env production    # deploy sonrası kesintisiz yenile\n",[29,1014,1015,1027,1044,1059],{"__ignoreMap":59},[63,1016,1017,1019,1021,1024],{"class":65,"line":66},[63,1018,86],{"class":69},[63,1020,135],{"class":73},[63,1022,1023],{"class":73}," ecosystem.config.js",[63,1025,1026],{"class":141},"                      # tüm uygulamaları başlat (env)\n",[63,1028,1029,1031,1033,1035,1038,1041],{"class":65,"line":83},[63,1030,86],{"class":69},[63,1032,135],{"class":73},[63,1034,1023],{"class":73},[63,1036,1037],{"class":73}," --env",[63,1039,1040],{"class":73}," production",[63,1042,1043],{"class":141},"     # env_production değişkenleriyle\n",[63,1045,1046,1048,1050,1052,1055,1057],{"class":65,"line":162},[63,1047,86],{"class":69},[63,1049,135],{"class":73},[63,1051,1023],{"class":73},[63,1053,1054],{"class":73}," --only",[63,1056,156],{"class":73},[63,1058,610],{"class":141},[63,1060,1061,1063,1065,1067,1069,1071],{"class":65,"line":177},[63,1062,86],{"class":69},[63,1064,441],{"class":73},[63,1066,1023],{"class":73},[63,1068,1037],{"class":73},[63,1070,1040],{"class":73},[63,1072,1073],{"class":141},"    # deploy sonrası kesintisiz yenile\n",[15,1075,1076],{},"Bu dosyayı projeyle birlikte Git'e eklerseniz uygulamanın nasıl çalıştırılacağı da kodla birlikte versiyonlanmış olur.",[10,1078,1080],{"id":1079},"_8-ortam-değişkenleri","8. Ortam değişkenleri",[15,1082,1083,1084,1086,1087,1090],{},"PM2, uygulama ilk başlatıldığındaki ortam değişkenlerini saklar. Bir değişkeni değiştirdikten sonra yalnızca ",[29,1085,520],{}," yetmez; ",[29,1088,1089],{},"--update-env"," eklemelisiniz:",[54,1092,1094],{"className":56,"code":1093,"language":58,"meta":59,"style":59},"NODE_ENV=production pm2 restart api --update-env\npm2 env 0              # 0 id'li sürecin ortam değişkenlerini göster\n",[29,1095,1096,1118],{"__ignoreMap":59},[63,1097,1098,1102,1105,1108,1111,1113,1115],{"class":65,"line":66},[63,1099,1101],{"class":1100},"sTEyZ","NODE_ENV",[63,1103,1104],{"class":207},"=",[63,1106,1107],{"class":73},"production",[63,1109,1110],{"class":69}," pm2",[63,1112,429],{"class":73},[63,1114,156],{"class":73},[63,1116,1117],{"class":73}," --update-env\n",[63,1119,1120,1122,1125,1128],{"class":65,"line":83},[63,1121,86],{"class":69},[63,1123,1124],{"class":73}," env",[63,1126,1127],{"class":254}," 0",[63,1129,1130],{"class":141},"              # 0 id'li sürecin ortam değişkenlerini göster\n",[10,1132,1134],{"id":1133},"_9-sunucu-açılışında-otomatik-başlatma","9. Sunucu açılışında otomatik başlatma",[15,1136,1137],{},"Sunucu yeniden başladığında uygulamaların geri gelmesi için iki adım gerekir:",[54,1139,1141],{"className":56,"code":1140,"language":58,"meta":59,"style":59},"pm2 startup            # init sistemini (systemd vb.) algılar ve çalıştırılacak sudo komutunu yazar\n# ekrana basılan \"sudo env PATH=... pm2 startup systemd -u kullanici --hp \u002Fhome\u002Fkullanici\" komutunu çalıştırın\n\npm2 save               # o an çalışan süreç listesini ~\u002F.pm2\u002Fdump.pm2 dosyasına kaydet\n",[29,1142,1143,1153,1158,1162],{"__ignoreMap":59},[63,1144,1145,1147,1150],{"class":65,"line":66},[63,1146,86],{"class":69},[63,1148,1149],{"class":73}," startup",[63,1151,1152],{"class":141},"            # init sistemini (systemd vb.) algılar ve çalıştırılacak sudo komutunu yazar\n",[63,1154,1155],{"class":65,"line":83},[63,1156,1157],{"class":141},"# ekrana basılan \"sudo env PATH=... pm2 startup systemd -u kullanici --hp \u002Fhome\u002Fkullanici\" komutunu çalıştırın\n",[63,1159,1160],{"class":65,"line":162},[63,1161,464],{"emptyLinePlaceholder":463},[63,1163,1164,1166,1169],{"class":65,"line":177},[63,1165,86],{"class":69},[63,1167,1168],{"class":73}," save",[63,1170,1171],{"class":141},"               # o an çalışan süreç listesini ~\u002F.pm2\u002Fdump.pm2 dosyasına kaydet\n",[15,1173,1174,1175,1178],{},"Açılışta PM2 bu kayıtlı listeyi geri yükler. Yeni uygulama ekleyip sildikten sonra ",[29,1176,1177],{},"pm2 save"," komutunu tekrar çalıştırmayı unutmayın.",[54,1180,1182],{"className":56,"code":1181,"language":58,"meta":59,"style":59},"pm2 resurrect          # kaydedilmiş listeyi elle geri yükle\npm2 unstartup systemd  # otomatik başlatmayı kaldır\n",[29,1183,1184,1194],{"__ignoreMap":59},[63,1185,1186,1188,1191],{"class":65,"line":66},[63,1187,86],{"class":69},[63,1189,1190],{"class":73}," resurrect",[63,1192,1193],{"class":141},"          # kaydedilmiş listeyi elle geri yükle\n",[63,1195,1196,1198,1201,1204],{"class":65,"line":83},[63,1197,86],{"class":69},[63,1199,1200],{"class":73}," unstartup",[63,1202,1203],{"class":73}," systemd",[63,1205,1206],{"class":141},"  # otomatik başlatmayı kaldır\n",[836,1208,1209],{},[15,1210,1211,1212,1215,1216,1219],{},"Node.js'i nvm ile kurduysanız ve sürüm değiştirdiyseniz ",[29,1213,1214],{},"pm2 unstartup"," + ",[29,1217,1218],{},"pm2 startup"," adımlarını tekrarlayın; startup betiği eski Node yolunu tutuyor olabilir.",[10,1221,1223],{"id":1222},"_10-bakım-ve-sorun-giderme","10. Bakım ve sorun giderme",[54,1225,1227],{"className":56,"code":1226,"language":58,"meta":59,"style":59},"pm2 reset api          # restart sayacı gibi metrikleri sıfırla\npm2 describe api       # pm2 show ile aynı\npm2 ping               # daemon ayakta mı?\npm2 kill               # daemon'ı ve tüm süreçleri durdur\n",[29,1228,1229,1241,1253,1263],{"__ignoreMap":59},[63,1230,1231,1233,1236,1238],{"class":65,"line":66},[63,1232,86],{"class":69},[63,1234,1235],{"class":73}," reset",[63,1237,156],{"class":73},[63,1239,1240],{"class":141},"          # restart sayacı gibi metrikleri sıfırla\n",[63,1242,1243,1245,1248,1250],{"class":65,"line":83},[63,1244,86],{"class":69},[63,1246,1247],{"class":73}," describe",[63,1249,156],{"class":73},[63,1251,1252],{"class":141},"       # pm2 show ile aynı\n",[63,1254,1255,1257,1260],{"class":65,"line":162},[63,1256,86],{"class":69},[63,1258,1259],{"class":73}," ping",[63,1261,1262],{"class":141},"               # daemon ayakta mı?\n",[63,1264,1265,1267,1270],{"class":65,"line":177},[63,1266,86],{"class":69},[63,1268,1269],{"class":73}," kill",[63,1271,1272],{"class":141},"               # daemon'ı ve tüm süreçleri durdur\n",[15,1274,1275],{},"Sık karşılaşılan durumlar:",[492,1277,1278,1288],{},[495,1279,1280],{},[498,1281,1282,1285],{},[501,1283,1284],{},"Durum",[501,1286,1287],{},"Çözüm",[511,1289,1290,1301,1311,1323,1336],{},[498,1291,1292,1295],{},[516,1293,1294],{},"Uygulama sürekli yeniden başlıyor (↺ artıyor)",[516,1296,1297,1300],{},[29,1298,1299],{},"pm2 logs api --err --lines 100"," ile hatayı bulun",[498,1302,1303,1306],{},[516,1304,1305],{},"Yeni env değişkeni uygulamaya geçmiyor",[516,1307,1308],{},[29,1309,1310],{},"pm2 restart api --update-env",[498,1312,1313,1316],{},[516,1314,1315],{},"Sunucu reboot sonrası uygulamalar yok",[516,1317,1318,1320,1321],{},[29,1319,1218],{}," çıktısındaki komutu çalıştırıp ",[29,1322,1177],{},[498,1324,1325,1328],{},[516,1326,1327],{},"Disk loglarla doldu",[516,1329,1330,1215,1333,1335],{},[29,1331,1332],{},"pm2 flush",[29,1334,680],{}," kurun",[498,1337,1338,1341],{},[516,1339,1340],{},"PM2 güncellemesinden sonra \"In-memory PM2 is out-of-date\" uyarısı",[516,1342,1343],{},[29,1344,95],{},[10,1346,1348],{"id":1347},"sonuç","Sonuç",[15,1350,1351,1352,1355,1356,1355,1359,1355,1362,1364,1365,576,1367,1370,1371,1374,1375,1381,1382,1386],{},"PM2 ile günlük işin büyük kısmı ",[29,1353,1354],{},"start",", ",[29,1357,1358],{},"list",[29,1360,1361],{},"logs",[29,1363,520],{},"\u002F",[29,1366,533],{},[29,1368,1369],{},"save"," komutlarıyla döner. Production'a çıkarken üç şeyi unutmayın: ayarları bir ",[38,1372,1373],{},"ecosystem dosyasında"," toplayın, ",[38,1376,1377,1215,1379],{},[29,1378,1218],{},[29,1380,1177],{}," ile açılışta otomatik başlatmayı kurun ve ",[38,1383,1384],{},[29,1385,680],{}," ile logların diski doldurmasını engelleyin.",[1388,1389,1390],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":59,"searchDepth":83,"depth":83,"links":1392},[1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404],{"id":12,"depth":83,"text":13},{"id":48,"depth":83,"text":49},{"id":122,"depth":83,"text":123},{"id":344,"depth":83,"text":345},{"id":404,"depth":83,"text":405},{"id":568,"depth":83,"text":569},{"id":744,"depth":83,"text":745},{"id":847,"depth":83,"text":848},{"id":1079,"depth":83,"text":1080},{"id":1133,"depth":83,"text":1134},{"id":1222,"depth":83,"text":1223},{"id":1347,"depth":83,"text":1348},"2026-10-24","Node.js uygulamalarını production'da ayakta tutan PM2'nin en çok kullanılan komutları — başlatma, izleme, loglar, cluster modu, ecosystem dosyası ve sunucu açılışında otomatik başlatma.","md",{},"\u002Ftr\u002Fblog\u002Ffrequently-used-pm2-commands",{"title":5,"description":1406},"tr\u002Fblog\u002Ffrequently-used-pm2-commands",[86,1413,1414],"nodejs","rehber","\u002Fen\u002Fblog\u002Ffrequently-used-pm2-commands","OsmRaF9eweDpE5qRPeHXvTKHtr0UE-zHFIazoW-RtPo",1792871130728]