Karena posting ini telah mendapat banyak perhatian selama bertahun-tahun, saya telah mendaftarkan solusi teratas per platform di bagian bawah posting ini.
Pos asli :
Saya ingin server node.js saya berjalan di latar belakang, yaitu: ketika saya menutup terminal saya ingin server saya tetap berjalan. Saya sudah googled ini dan datang dengan tutorial ini , tetapi tidak berfungsi sebagaimana dimaksud. Jadi alih-alih menggunakan skrip daemon, saya pikir saya hanya menggunakan redirection output ( 2>&1 >> file
bagian), tetapi ini juga tidak keluar - saya mendapatkan baris kosong di terminal saya, seperti sedang menunggu output / kesalahan.
Saya juga mencoba untuk meletakkan proses di latar belakang, tetapi begitu saya menutup terminal saya prosesnya juga mati.
Jadi bagaimana saya bisa membiarkannya berjalan ketika saya mematikan komputer lokal saya?
Solusi teratas :
- Systemd (Linux)
- Launchd (Mac)
- node-windows (Windows)
- PM2 (Node.js)
Jawaban:
Menyalin jawaban saya sendiri dari Bagaimana cara menjalankan aplikasi Node.js sebagai prosesnya sendiri?
Jawaban 2015 : hampir setiap distro Linux hadir dengan systemd, yang berarti selamanya, monit, PM2, dll tidak lagi diperlukan - OS Anda sudah menangani tugas-tugas ini .
Buat
myapp.service
file (ganti 'myapp' dengan nama aplikasi Anda, tentu saja):Catatan jika Anda baru menggunakan Unix:
/var/www/myapp/app.js
seharusnya ada#!/usr/bin/env node
di baris pertama.Salin file layanan Anda ke
/etc/systemd/system
.Mulai dengan
systemctl start myapp
.Aktifkan untuk dijalankan saat boot dengan
systemctl enable myapp
.Lihat log dengan
journalctl -u myapp
Ini diambil dari Bagaimana kami menggunakan aplikasi simpul di Linux, edisi 2018 , yang juga mencakup perintah untuk menghasilkan AWS / DigitalOcean / Azure CloudConfig untuk membangun Linux / server simpul (termasuk
.service
file).sumber
~/.config/systemd/user
, mulai dengansystemctl --user start myapp
, aktifkan dengansystemctl --user enable myapp
.Anda dapat menggunakan Forever, alat CLI sederhana untuk memastikan bahwa skrip node yang diberikan berjalan terus menerus (yaitu selamanya): https://www.npmjs.org/package/forever
sumber
forever start /path/to/yourApp.js
di skrip startup server Anda.PEMBARUAN - Seperti disebutkan dalam salah satu jawaban di bawah ini, PM2 memiliki beberapa fungsionalitas yang sangat bagus yang hilang selamanya. Pertimbangkan untuk menggunakannya.
Jawaban Asli
Gunakan nohup :
EDIT Saya ingin menambahkan bahwa jawaban yang diterima benar-benar cara untuk pergi. Saya menggunakan selamanya pada contoh yang perlu begadang. Saya suka melakukannya
npm install -g forever
di jalur simpul dan kemudian lakukanforever start server.js
sumber
nohup
singkatanno hangup
yang berasal dari masa lalu, di mana Anda ingin Anda menjaga proses tetap hidup ketika Anda "hangup" modem Anda.Ini mungkin bukan cara yang diterima, tapi saya melakukannya dengan layar, terutama saat dalam pengembangan karena saya bisa membawanya kembali dan membodohinya jika perlu.
Layar akan melepaskan dan bertahan Anda log off. Maka Anda bisa mendapatkannya kembali melakukan layar -r. Tekan manual layar untuk detail lebih lanjut. Anda dapat memberi nama layar dan yang lainnya jika Anda suka.
sumber
Pembaruan 2016: Seri node-windows / mac / linux menggunakan API umum di semua sistem operasi, jadi ini benar-benar solusi yang relevan. Namun; node-linux menghasilkan file systemv init. Karena systemd terus tumbuh dalam popularitas, secara realistis pilihan yang lebih baik di Linux. Selamat datang PR jika ada yang ingin menambahkan dukungan systemd ke node-linux :-)
Utas asli:
Ini adalah utas yang cukup lama sekarang, tetapi node-windows menyediakan cara lain untuk membuat layanan latar belakang pada Windows. Ini secara longgar didasarkan pada
nssm
konsep menggunakanexe
pembungkus di sekitar skrip simpul Anda. Namun; ia menggunakanwinsw.exe
sebaliknya dan menyediakan pembungkus simpul yang dapat dikonfigurasi untuk kontrol lebih rinci tentang bagaimana proses dimulai / berhenti pada kegagalan. Proses-proses ini tersedia seperti layanan lainnya:Modul ini juga dibuat di beberapa event logging:
Daemonisasi skrip Anda dilakukan melalui kode. Sebagai contoh:
Modul ini mendukung hal-hal seperti capping restart (jadi skrip yang buruk tidak menyumbat server Anda) dan interval waktu yang bertambah antara restart.
Karena layanan node-windows berjalan seperti yang lain, dimungkinkan untuk mengelola / memantau layanan dengan perangkat lunak apa pun yang sudah Anda gunakan.
Akhirnya, tidak ada
make
ketergantungan. Dengan kata lain, lugasnpm install -g node-windows
akan bekerja. Anda tidak perlu sihir Visual Studio, .NET, atau simpul-gyp untuk menginstal ini. Juga, ini berlisensi MIT dan BSD.Dalam pengungkapan penuh, saya penulis modul ini. Itu dirancang untuk menghilangkan rasa sakit yang dialami OP, tetapi dengan integrasi yang lebih ketat ke dalam fungsionalitas yang sudah disediakan Sistem Operasi. Saya berharap pemirsa di masa depan dengan pertanyaan yang sama akan bermanfaat.
sumber
UPDATE : saya diperbarui untuk memasukkan yang terbaru dari PM2:
untuk banyak kasus penggunaan, menggunakan layanan systemd adalah cara paling sederhana dan paling tepat untuk mengelola proses simpul. bagi mereka yang menjalankan banyak proses simpul atau menjalankan layanan simpul mikro secara mandiri dalam satu lingkungan, pm2 adalah alat berfitur lebih lengkap.
https://github.com/unitech/pm2
http://pm2.io
pm2 monit
atau dengan daftar prosespm2 list
pm2 logs
sumber
Jika Anda hanya ingin menjalankan skrip tanpa gangguan sampai selesai, Anda dapat menggunakan
nohup
sebagaimana telah disebutkan dalam jawaban di sini. Namun, tidak ada jawaban yang memberikan perintah lengkap yang juga mencatatstdin
danstdout
.>>
berarti menambahkan keapp.log
.2>&1
memastikan bahwa kesalahan juga dikirim kestdout
dan ditambahkan keapp.log
.&
memastikan terminal Anda saat ini terputus dari perintah sehingga Anda dapat terus bekerja.Jika Anda ingin menjalankan server node (atau sesuatu yang harus mulai kembali ketika server restart) Anda harus menggunakan systemd / systemctl .
sumber
Jika Anda menjalankan OSX, maka cara termudah untuk menghasilkan proses sistem yang benar adalah dengan menggunakannya
launchd
untuk meluncurkannya.Bangun plist seperti ini, dan letakkan di / Library / LaunchDaemon dengan nama
top-level-domain.your-domain.application.plist
(Anda harus root ketika meletakkannya):Setelah selesai, terbitkan ini (sebagai root):
dan Anda berlari.
Dan Anda masih akan berjalan setelah restart.
Untuk opsi lain dalam daftar lihat halaman manual di sini: https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html
sumber
Coba jalankan perintah ini jika Anda menggunakan nohup -
Anda juga dapat menggunakan selamanya untuk memulai server
PM2 juga mendukung
npm start
sumber
pm2 start npm -- start
Saya hanya menggunakan modul daemon npm:
Akhir-akhir ini saya juga menggunakan mon (1) dari TJ Holowaychuk untuk memulai dan mengelola aplikasi simpul sederhana.
sumber
Saya menggunakan Supervisor untuk pengembangan. Itu hanya bekerja. Kapan pun Anda membuat perubahan pada file .js, Supervisor secara otomatis memulai ulang aplikasi Anda dengan perubahan itu dimuat.
Berikut tautan ke halaman Github-nya
Install :
Anda dapat dengan mudah membuatnya menonton ekstensi lain dengan -e. Perintah lain yang sering saya gunakan adalah -i untuk mengabaikan folder tertentu.
Anda dapat menggunakan nohup dan penyelia untuk membuat aplikasi simpul Anda berjalan di latar belakang bahkan setelah Anda keluar.
sumber
Node.js sebagai layanan latar belakang di WINDOWS XP
Instalasi:
Buat c: \ node \ helloworld.js
Buka konsol perintah dan ketik berikut ini (setx hanya jika Resource Kit diinstal)
Goodie batch bagus adalah membuat c: \ node \ ServiceMe.cmd
Manajemen Pelayanan:
sumber
Jawaban yang diterima mungkin adalah jawaban produksi terbaik, tetapi untuk peretasan cepat yang melakukan pekerjaan dev, saya menemukan ini:
nodejs scriptname.js &
tidak bekerja, karena nodejs tampaknya melahap &, dan hal itu tidak membiarkan saya tetap menggunakan terminal tanpa scriptname.js sekarat.Tapi saya memasukkan
nodejs scriptname.js
file .sh, dannohup sh startscriptname.sh &
berhasil.Jelas bukan hal produksi, tetapi memecahkan masalah "Saya harus tetap menggunakan terminal saya dan tidak ingin memulai 5 terminal yang berbeda".
sumber
Jika Anda menjalankan nodejs di server linux, saya pikir ini adalah cara terbaik.
Buat skrip layanan dan salin ke /etc/init/nodejs.conf
mulai layanan: sudo layanan simpul mulai
berhenti layanan: sudo layanan simpul berhenti
Skrip Sevice
sumber
Pembaruan Juni 2017:
Solusi untuk Linux: (Red hat). Komentar sebelumnya tidak berhasil untuk saya. Ini bekerja untuk saya di Amazon Web Service - Red Hat 7. Semoga ini bekerja untuk seseorang di luar sana.
sumber
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
apa fungsinya. Bisakah Anda memberi saya detail lebih lanjut? Saya tidak yakin tapi saya pikir itu pengalihan lalu lintas dari80
ke8080
mana simpul mendengarkan server untuk, kan?gunakan nssm solusi terbaik untuk windows, cukup unduh nssm , buka cmd untuk direktori dan jenis nssm
ini akan menginstal layanan windows baru yang akan terdaftar di services.msc dari sana Anda dapat memulai atau menghentikan layanan, layanan ini akan mulai secara otomatis dan Anda dapat mengonfigurasi untuk memulai kembali jika gagal.
sumber
Untuk melengkapi berbagai opsi yang disarankan, berikut ini adalah satu lagi:
daemon
perintah di GNU / Linux, yang dapat Anda baca di sini: http://libslack.org/daemon/manpages/daemon.1.html . (permintaan maaf jika ini sudah disebutkan dalam salah satu komentar di atas).sumber
Lihat fugue! Selain meluncurkan banyak pekerja, Anda juga dapat merusak proses simpul Anda!
http://github.com/pgte/fugue
sumber
Adakah yang melihat ada kesalahan sepele tentang posisi "2> & 1"?
seharusnya
sumber
Saya menggunakan tmux untuk lingkungan pengembangan beberapa jendela / panel pada host jarak jauh. Sangat mudah untuk melepaskan dan menjaga proses tetap berjalan di latar belakang. Lihatlah tmux
sumber
Untuk orang-orang yang menggunakan versi yang lebih baru dari modul daemon npm - Anda harus meneruskan deskriptor file alih-alih string:
sumber
PM2 adalah manajer proses produksi untuk aplikasi Node.js dengan penyeimbang beban bawaan. Hal ini memungkinkan Anda untuk menjaga aplikasi tetap hidup selamanya, memuatnya kembali tanpa downtime dan untuk memfasilitasi tugas-tugas admin sistem umum. https://github.com/Unitech/pm2
sumber
Saya terkejut bahwa tidak ada yang menyebut Guvnor
Saya telah mencoba selamanya, pm2, dll. Tetapi, ketika datang ke kontrol yang solid dan metrik kinerja berbasis web, saya telah menemukan Guvnor sejauh ini yang terbaik. Plus, itu juga sepenuhnya opensource.
Sunting: Namun, saya tidak yakin apakah itu berfungsi di windows. Saya hanya menggunakannya di linux.
sumber
Karena saya kehilangan opsi ini dalam daftar jawaban yang disediakan, saya ingin menambahkan opsi yang memenuhi syarat pada 2020: buruh pelabuhan atau platform wadah yang setara . Selain memastikan aplikasi Anda berfungsi di lingkungan yang stabil, ada manfaat keamanan tambahan serta portabilitas yang ditingkatkan.
Ada dukungan buruh pelabuhan untuk Windows, macOS dan sebagian besar / distribusi Linux utama. Memasang buruh pelabuhan pada platform yang didukung agak lurus ke depan dan didokumentasikan dengan baik. Menyiapkan aplikasi Node.js semudah memasukkannya ke dalam wadah dan menjalankan wadah itu sambil memastikannya dimulai kembali setelah dimatikan.
Buat Gambar Kontainer
Dengan asumsi aplikasi Anda tersedia di / home / me / my-app di server itu, buat file teks Dockerfile di folder / home / me / my-app dengan konten yang mirip dengan yang ini:
Buat gambar menggunakan perintah seperti ini:
Catatan: Parameter terakhir adalah memilih folder yang berisi Dockerfile bukan Dockerfile itu sendiri. Anda dapat memilih yang berbeda menggunakan opsi -f .
Mulai Kontainer
Gunakan perintah ini untuk memulai wadah:
Perintah ini mengasumsikan aplikasi Anda mendengarkan pada port 3000 dan Anda ingin aplikasi tersebut diekspos pada port 80 host Anda.
Ini adalah contoh yang sangat terbatas pasti, tetapi ini adalah titik awal yang baik.
sumber
Jika Anda menggunakan pm2, Anda dapat menggunakannya dengan
autorestart
set kefalse
:Ini akan menghasilkan sampel
ecosystem.config.js
:sumber
Jawaban ini cukup terlambat untuk pesta, tetapi saya menemukan bahwa solusi terbaik adalah dengan menulis skrip shell yang menggunakan perintah
screen -dmS
dan keduanyanohup
.Saya juga menambahkan
>> logfile
bit di bagian akhir sehingga saya dapat dengan mudah menyimpanconsole.log()
pernyataan simpul .Mengapa saya menggunakan skrip shell? Yah saya juga menambahkan pernyataan if yang memeriksa untuk melihat apakah
node myserver.js
proses sudah berjalan.Dengan begitu saya dapat membuat opsi baris perintah tunggal yang memungkinkan saya menjaga server tetap aktif dan juga me-restart ketika saya telah membuat perubahan, yang sangat membantu untuk pengembangan.
sumber