Di server Debian, saya menginstal Node.js. Saya mengerti cara meluncurkan aplikasi dari dempul dengan baris perintah ini:
node /srv/www/MyUserAccount/server/server.js
dan sampai di alamat 50.51.52.53:8080
(IP dan port).
Tapi begitu saya menutup dempul, maka saya tidak bisa mencapai alamat 50.51.52.53:8080
lagi.
Bagaimana cara membuat aplikasi Node.js berjalan secara permanen?
Seperti yang bisa Anda tebak, saya seorang pemula dengan Linux dan Node.js.
Jawaban:
Meskipun jawaban yang lain menyelesaikan masalah OP, semuanya berlebihan dan tidak menjelaskan mengapa ia mengalami masalah ini.
Kuncinya adalah baris ini, "Saya menutup dempul, maka saya tidak bisa mencapai alamat"
Ketika Anda masuk ke host jarak jauh di Putty Anda telah memulai proses SSH linux dan semua perintah yang diketik dari sesi SSH akan dieksekusi sebagai anak-anak dari proses tersebut.
Masalah Anda adalah bahwa ketika Anda menutup Dempul Anda keluar dari sesi SSH yang membunuh proses itu dan setiap proses anak aktif. Ketika Anda menutup dempul Anda secara tidak sengaja membunuh server Anda karena Anda menjalankannya di latar depan . Untuk menghindari perilaku ini, jalankan server di latar belakang dengan menambahkan & ke perintah Anda:
Masalahnya di sini adalah kurangnya pengetahuan linux dan bukan pertanyaan tentang simpul. Untuk info lebih lanjut, periksa: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
MEMPERBARUI:
Seperti yang telah disebutkan orang lain, server simpul mungkin masih mati ketika keluar dari terminal. Gotcha yang umum saya temui adalah bahwa meskipun proses node berjalan dalam bg, itu stdout dan stderr masih menunjuk ke terminal. Ini berarti bahwa jika server node menulis ke console.log atau console.error maka akan menerima kesalahan pipa rusak dan crash. Ini dapat dihindari dengan menyalurkan output dari proses Anda:
Jika masalah tetap ada maka Anda harus melihat ke hal-hal seperti tmux atau nohup , yang masih lebih kuat daripada solusi spesifik node, karena mereka dapat digunakan untuk menjalankan semua jenis proses (database, layanan logging, bahasa lain).
Kesalahan umum yang dapat menyebabkan server keluar adalah setelah menjalankan,
nohup node your_path/server.js &
Anda cukup menutup terminal Putty dengan satu klik sederhana. Anda harus menggunakanexit
perintah sebagai gantinya, maka server simpul Anda akan aktif dan berjalan.sumber
&
layanan masih ditutup. (Baru diuji pada Debian Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
menjalankan aplikasi dalam bg tetapi ia mati ketika istilah itu ditutup. Tapi tidak yakin kenapa.exit
perintah untuk keluar dari terminal.Anda dapat menginstal selamanya menggunakan npm seperti ini:
Dan kemudian jalankan aplikasi Anda dengan:
Atau sebagai layanan:
Forever me-restart aplikasi Anda ketika crash atau berhenti karena suatu alasan. Untuk membatasi mulai ulang hingga 5 Anda dapat menggunakan:
Untuk membuat daftar semua proses yang berjalan:
Perhatikan bilangan bulat di dalam tanda kurung dan gunakan sebagai berikut untuk menghentikan proses:
Mulai ulang proses yang sedang berjalan:
Jika Anda bekerja pada file aplikasi Anda, Anda dapat menggunakan
-w
parameter untuk memulai kembali secara otomatis setiap kaliserver.js
file Anda berubah:sumber
forever start <file>
forever server.js
danforever start server.js
? Saya tahu katanya "sebagai layanan" tetapi apa artinya itu?forever server.js
, itu mulai server. Jika saya menekanCtrl
+C
, itu akan menghentikan layanan. Jika saya mengetikforever start server.js
maka itu memulai layanan dan bahkan jika saya menekanCtrl
+C
itu tetap terbuka. Anda kemudian dapat melakukan perintah lain yang dirujuk di atas untuk menghentikan / melihat daftar. Setidaknya itulah yang saya alami.forever
modul (v0.15.3) rentan terhadap Regular Expression serangan Denial of Service dan tidak boleh digunakan: github.com/foreverjs/forever/issues/960Anda dapat menggunakan PM2 , ini adalah manajer proses produksi untuk aplikasi Node.js dengan penyeimbang beban bawaan.
Instal PM2
Mulai aplikasi
Jika Anda menggunakan ekspres maka Anda dapat memulai aplikasi seperti
Daftar semua proses yang berjalan:
Ini akan mendaftar semua proses. Anda kemudian dapat menghentikan / memulai kembali layanan Anda dengan menggunakan ID atau Nama aplikasi dengan perintah berikut.
Untuk menampilkan log
sumber
Saya akan merekomendasikan mencari sesuatu seperti Forever untuk me-restart Node jika terjadi crash, dan menangani daemonisasi ini untuk Anda.
sumber
nohup
, simpul akan keluar ketika Anda keluar dari sesi ssh jika Anda menjalankannya dengan cara ini (kecuali jika Anda menggunakan sesuatu seperti layar untuk tmux).nohup
. Alangkah baiknya jika kita bisa menyelesaikan kebingungan ini. Tapi saya tidak tahu harus mulai dari mana.nohup
. Contoh:nohup node app.js &
Jika Anda hanya ingin menjalankan aplikasi simpul di terminal selalu, cukup gunakan layar.
Instal di ubuntu / debian:
Pemakaian:
ctrl + a
dan kemudianctrl + d
memberhentikanUntuk mendapatkan kembali:
Satu layar:
screen -r
Jika ada lebih dari satu, Anda dapat mencantumkan semua layar dengan:
screen -ls
Lalu:
screen -r pid_number
sumber
Anda cukup menggunakan ini
Ini akan membuat aplikasi tetap berjalan dan untuk mematikannya Anda harus membunuhnya.
Untuk itu Anda bisa menginstal
htop
dan kemudian mencari node dan kemudian membunuhnyasumber
exit
perintah). Jika pengguna hanya menutup jendela, ini mungkin menggunakan sinyal selainSIGHUP
untuk mengakhiri proses, dan karena itu simpul akan mati pula.killall node
, yang akan membunuh semua proses simpul, dalam kasus saya hanya satu.Forever adalah modul NodeJs yang sangat baik untuk melakukan hal itu.
Instal
forever
dengan mengetikkan baris perintahKemudian gunakan perintah berikut untuk menjalankan skrip node.js
Anda baik untuk pergi. Selain itu Anda dapat berlari
untuk melihat semua skrip yang berjalan. Anda dapat menghentikan skrip tertentu dengan mengetik
di mana
[pid]
ID proses dari skrip akan Anda peroleh darilist
perintah. Untuk menghentikan semua skrip, Anda dapat mengetiksumber
sumber
Instalasi
Anda dapat menggunakan selamanya untuk menjalankan skrip secara terus menerus
untuk layanan berhenti
sumber
Inilah solusi pemula yang telah saya gunakan untuk proyek pribadi saya:
Tempatkan di
/etc/init/node_app_daemon.conf
:Ini juga akan menangani respawning aplikasi Anda jika crash. Ini akan menyerah upaya untuk respawn aplikasi Anda jika crash 3 atau lebih banyak dalam waktu kurang dari 15 detik.
sumber
Selama pengembangan, saya sarankan menggunakan nodemon . Ini akan memulai ulang server Anda setiap kali ada perubahan file. Seperti yang orang lain tunjukkan, Selamanya adalah pilihan tetapi dalam produksi, semuanya tergantung pada platform yang Anda gunakan. Anda biasanya ingin menggunakan cara sistem operasi yang direkomendasikan untuk menjaga layanan tetap terjaga (mis. Http://www.freedesktop.org/wiki/Software/systemd/ ).
sumber
nodemon
menjalankan perintah kasar kecuali jika Anda menentukan file server JS, jadi saya menggunakan ini untuk menjalankan mongo dan simpul selamanya / secara bersamaanSaya telah menemukan selamanya untuk melakukan pekerjaan dengan sangat baik.
Dengan asumsi Anda sudah menginstal npm, jika tidak, lakukan saja
Kemudian instal selamanya
Sekarang Anda bisa menjalankannya seperti ini
https://codingweb.io/run-nodejs-application-background/
sumber
Pertama instal pm2 secara global
lalu mulai
sumber
Cara lain adalah membuat unit sistem untuk aplikasi Anda. buat file "XXX.service" di folder "/ etc / systemd / system", mirip dengan ini:
Keuntungannya adalah aplikasi akan berjalan sebagai layanan, secara otomatis restart jika crash.
Anda juga dapat menggunakan sytemctl untuk mengelolanya:
systemctl start XXX
untuk memulai layanan,systemctl stop XXX
menghentikannya dansystemctl enable XXX
memulai aplikasi secara otomatis ketika sistem melakukan booting.sumber
Saya harap ini akan membantu Anda.
Di baris perintah, instal selamanya:
Buat file contoh:
Anda dapat mengedit file dan mendapatkan hasil langsung di browser Anda.
Anda dapat menggunakan filezilla atau editor apa pun untuk mengedit file. Jalankan perintah ini untuk menjalankan file:
sumber
Tidak perlu menginstal paket lain.
Jalankan perintah ini
server.js adalah file server Anda atau bisa juga api.js
Setelah itu tekan " keluar " untuk menutup terminal
sumber
Saya sarankan menggunakan PM2, yang merupakan manajer proses untuk aplikasi Node.js. PM2 menyediakan cara mudah untuk mengelola dan daemonisasi aplikasi (menjalankannya sebagai layanan).
lihat tautan ini - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
sumber
Paket selamanya bekerja untuk saya, hanya satu hal, itu tergantung pada sedalam-dalamnya , jadi jika Anda memiliki masalah dengan menginstalnya seperti:
Mencoba:
sebagai gantinya.
sumber