Saya terhubung ke server linux melalui dempul SSH. Saya mencoba menjalankannya sebagai proses latar belakang seperti ini:
$ node server.js &
Namun, setelah 2,5 jam terminal menjadi tidak aktif dan proses mati. Apakah ada cara lain agar saya bisa menjaga proses tetap hidup bahkan dengan terminal terputus?
Edit 1
Sebenarnya, saya sudah mencoba nohup
, tetapi begitu saya menutup terminal Putty SSH atau mencabut internet saya, proses server langsung berhenti.
Apakah ada yang harus saya lakukan di Putty?
Edit 2 (pada Feb, 2012)
Ada node.js
modul, selamanya . Ini akan menjalankan server node.js sebagai layanan daemon.
node.js
linux
background-process
murvinlai
sumber
sumber
exit
. Ketika saya hanya menutup jendela Putty gagal.Jawaban:
Solusi sederhana (jika Anda tidak tertarik untuk kembali ke proses, hanya ingin tetap berjalan):
Ada juga
jobs
perintah untuk melihat daftar proses-proses yang di-background. Dan Anda dapat membunuh proses latar belakang dengan menjalankankill %1
ataukill %2
dengan nomor tersebut menjadi indeks dari proses tersebut.Solusi hebat (memungkinkan Anda terhubung kembali ke proses jika interaktif):
Anda kemudian dapat melepaskan dengan menekan Ctrl + a + d dan kemudian melampirkan kembali dengan menjalankan
screen -r
Juga pertimbangkan alternatif yang lebih baru untuk layar, tmux.
sumber
sudo bash
.nohup node server.js > /dev/null 2>&1 &
nohup
berarti: Jangan menghentikan proses ini bahkan ketika stty terputus.> /dev/null
berarti: stdout menuju / dev / null (yang merupakan perangkat dummy yang tidak merekam output apa pun).2>&1
berarti: stderr juga masuk ke stdout (yang sudah dialihkan ke/dev/null
). Anda dapat mengganti & 1 dengan jalur file untuk menyimpan log kesalahan, misalnya:2>/tmp/myLog
&
pada akhirnya berarti: jalankan perintah ini sebagai tugas latar belakang.sumber
/dev/null
? Pencatatan yang bagus ... Semoga berhasil mencoba men-debug ini ...Anda benar-benar harus mencoba menggunakannya
screen
. Ini sedikit lebih rumit dari sekadar melakukannohup long_running &
, tetapi memahami layar begitu Anda tidak pernah kembali lagi.Mulailah sesi layar Anda terlebih dahulu:
Jalankan apa pun yang Anda inginkan:
Tekan ctrl + A dan kemudian d. Selesai Sesi Anda terus berlangsung di latar belakang.
Anda dapat mendaftar semua sesi dengan
screen -ls
, dan melampirkan ke beberapa denganscreen -r 20673.pts-0.srv
perintah, di mana 0673.pts-0.srv adalah daftar entri.sumber
Ini adalah pertanyaan lama, tetapi berperingkat tinggi di Google. Saya hampir tidak bisa percaya pada jawaban dengan suara terbanyak, karena menjalankan proses node.js di dalam sesi layar, dengan
&
atau bahkan dengannohup
bendera - semuanya - hanyalah solusi.Khususnya solusi layar / tmux, yang harus benar-benar dianggap sebagai solusi amatir . Layar dan Tmux tidak dimaksudkan untuk menjaga proses berjalan, tetapi untuk sesi terminal multiplexing. Tidak apa-apa, ketika Anda menjalankan skrip di server Anda dan ingin memutuskan sambungan. Tetapi untuk server node.js Anda tidak ingin proses Anda dilampirkan ke sesi terminal. Ini terlalu rapuh. Agar semuanya tetap berjalan, Anda perlu melakukan daemonisasi proses!
Ada banyak alat bagus untuk melakukannya.
PM2 : http://pm2.keymetrics.io/
Satu keuntungan besar yang saya lihat mendukung PM2 adalah dapat menghasilkan skrip startup sistem untuk membuat proses bertahan di antara restart:
Di mana
platform
bisaubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.forever.js : https://github.com/foreverjs/forever
Skrip init :
Saya tidak masuk ke detail tentang bagaimana menulis skrip init, karena saya bukan ahli dalam hal ini dan itu akan terlalu lama untuk jawaban ini, tetapi pada dasarnya mereka adalah skrip shell sederhana, dipicu oleh peristiwa OS. Anda dapat membaca lebih lanjut tentang ini di sini
Docker :
Jalankan saja server Anda dalam wadah Docker dengan
-d
opsi dan, ya ampun , Anda memiliki server node.js yang terubah!Berikut ini adalah contoh Dockerfile (dari panduan resmi node.js ):
Kemudian buat gambar Anda dan jalankan wadah Anda:
Semoga ini bisa membantu seseorang mendarat di halaman ini. Selalu gunakan alat yang tepat untuk pekerjaan itu. Ini akan menghemat banyak sakit kepala dan berjam-jam!
sumber
tail -f
memasukkan file log yang dihasilkan PM2.screen
solusi yang banyak orang temukan melakukan pekerjaan adalah solusi. Ada banyak cara untuk mencapai tugas tertentu. Saya percaya itu terjadi bahwa (pertimbangkan pertanyaan spesifik) itu terjadi untuk mencapai tugas khususrun as background and never die
untuk banyak orang. Ini juga memiliki bonus tambahan yang memungkinkan pengguna untuk kembali ke dalamnya untuk berinteraksi kembali dan membuat perubahan jika dia mau. Kuncinya adalah komponenbackground
dannever die
. Semua solusi memiliki bonus tertentu.nohup
adalah solusinya. Ini dipanggang di Linux, dan memang untuk apa. Ini satu baris, bersih, dan berfungsi sebagaimana mestinya, setiap kali, terlepas dari pembaruan. Orang-orang harus benar-benar berusaha menghindari penggunaan alat pihak ketiga untuk kasus penggunaan dasar seperti ini. Contoh buruh pelabuhan (misalnya) jauh lebih verbose dan sumber daya intensif daripada satu perintah sederhana di jawaban pilihan teratas. Love Docker, tetapi tidak untuk ini.nohup
solusinya tidak memenuhi persyaratan "tidak pernah mati". Kecuali jika Anda menulistrap
loop yang sangat rumit atau tak beraturan, saya tidak melihat bagaimana cara menjaga proses tetap dihidupkan tanpa menggunakan alat yang ditulis khusus untuk tujuan ini (atau skrip init yang ditulis sendiri, tentu saja).solusi lain tidak mengakui pekerjaan itu
sumber
nohup
akan memungkinkan program untuk melanjutkan bahkan setelah terminal mati. Saya benar-benar mengalami situasi di mananohup
sesi SSH tidak berhenti dengan benar, jadi Anda juga harus mengarahkan ulang input:Tergantung pada bagaimana
nohup
dikonfigurasi, Anda mungkin juga perlu mengarahkan output standar dan kesalahan standar ke file.sumber
Saya memiliki fungsi ini di file shell rc saya, berdasarkan jawaban @ Yoichi:
Anda dapat menggunakannya dengan cara ini:
sumber
Nohup dan layar menawarkan solusi cahaya yang hebat untuk menjalankan Node.js di latar belakang. Node.js process manager ( PM2 ) adalah alat yang berguna untuk penyebaran. Instal dengan npm secara global di sistem Anda:
npm install pm2 -g
untuk menjalankan aplikasi Node.js sebagai daemon:
pm2 start app.js
Anda dapat menautkannya secara opsional ke Keymetrics.io, SAAS pemantauan yang dibuat oleh Unitech.
sumber
Ini akan menghapus perintah dari daftar tugas aktif dan mengirim perintah ke latar belakang
sumber
Sudahkah Anda membaca tentang perintah nohup ?
sumber
Untuk menjalankan perintah sebagai layanan sistem pada debian dengan sysv init:
Salin skrip skrip dan sesuaikan untuk kebutuhan Anda, mungkin yang harus Anda lakukan adalah mengatur beberapa variabel. Skrip Anda akan mewarisi dari default baik-baik saja
/lib/init/init-d-script
, jika ada sesuatu yang tidak sesuai dengan kebutuhan Anda - timpa dalam skrip Anda. Jika terjadi kesalahan, Anda dapat melihat detail di sumber/lib/init/init-d-script
. Vars wajib adalahDAEMON
danNAME
. Script akan digunakanstart-stop-daemon
untuk menjalankan perintah Anda, karenaSTART_ARGS
Anda dapat menentukan parameter tambahanstart-stop-daemon
untuk digunakan.Begitulah cara saya menjalankan beberapa hal python untuk wikimedia wiki saya:
Selain menetapkan vars saya harus menimpa
do_stop_cmd
karena pengganti python executable, sehingga layanan tidak berhenti dengan benar.sumber
Terlepas dari solusi keren di atas, saya akan menyebutkan juga tentang alat pengawas dan monit yang memungkinkan untuk memulai proses, memantau keberadaannya dan memulainya jika mati. Dengan 'monit' Anda juga dapat menjalankan beberapa pemeriksaan aktif seperti memeriksa apakah proses merespons permintaan http
sumber
Untuk Ubuntu saya menggunakan ini:
salam
sumber
Coba ini untuk solusi sederhana
cmd & keluar
sumber