NSSM adalah program pembantu layanan yang mirip dengan SRVANY dan CYGRUNSRV. Ini dapat memulai aplikasi apa pun (seperti konsol) sebagai layanan NT dan akan memulai kembali layanan jika gagal karena alasan apa pun.
NSSM juga memiliki penginstal dan penghapus layanan grafis.
Ini adalah garpu NSSM
File biner yang dapat Anda temukan di rilis di sini
Kode Asli: https://git.nsssm.cc/nssm/nssm oleh Iain Patterson
Dokumentasi: Penggunaan, Perintah
Dalam catatan penggunaan di bawah ini, argumen untuk program dapat ditulis dalam kurung sudut dan/atau kurung persegi. berarti Anda harus memasukkan string yang sesuai dan [] berarti string adalah opsional. Lihat contoh di bawah ...
Perhatikan bahwa di mana -mana muncul, Anda dapat mengganti nama tampilan layanan.
Untuk memasang layanan, jalankan
nssm install <servicename>
Anda akan diminta untuk memasukkan jalur lengkap ke aplikasi yang ingin Anda jalankan dan opsi baris perintah apa pun untuk diteruskan ke aplikasi itu.
Gunakan System Service Manager (services.msc) untuk mengontrol properti layanan canggih seperti metode startup dan interaksi desktop. NSSM dapat mendukung opsi ini di lain waktu ...
Untuk memasang layanan, jalankan
nssm install <servicename> <application> [<options>]
NSSM kemudian akan mencoba menginstal layanan yang menjalankan aplikasi yang disebutkan dengan opsi yang diberikan (jika Anda menentukan apa pun).
Jangan lupa untuk melampirkan jalur dalam "kutipan" jika mengandung spasi!
Jika Anda ingin memasukkan kutipan dalam opsi yang Anda perlukan untuk "" "kutipan" "" kutipan.
NSSM akan meluncurkan aplikasi yang tercantum dalam registri saat Anda mengirimkannya sinyal awal dan akan menghentikannya saat Anda mengirim sinyal berhenti. Sejauh ini, sangat mirip dengan Srvany. Tetapi NSSM adalah Manajer Layanan Non-Pengisap dan dapat mengambil tindakan jika/ketika aplikasi mati.
Tanpa konfigurasi dari Anda, NSSM akan mencoba memulai kembali sendiri jika memperhatikan bahwa aplikasi mati tetapi Anda tidak mengirimkannya sinyal berhenti. NSSM akan terus berusaha, berhenti di antara setiap upaya, sampai layanan berhasil dimulai atau Anda mengirimkannya sinyal berhenti.
NSSM akan menjeda waktu yang semakin lama antara upaya restart berikutnya jika layanan gagal memulai tepat waktu, hingga maksimal empat menit. Ini sehingga tidak mengkonsumsi waktu CPU dalam jumlah berlebihan mencoba memulai aplikasi yang gagal berulang kali. Jika Anda mengidentifikasi penyebab kegagalan dan tidak ingin menunggu, Anda dapat menggunakan Konsol Layanan Windows (di mana layanan akan ditampilkan dalam keadaan terhenti) untuk mengirim sinyal lanjutan ke NSSM dan akan coba lagi dalam beberapa detik.
Secara default, NSSM mendefinisikan "cara yang tepat waktu" berada dalam 1500 milidetik. Anda dapat mengubah ambang batas untuk layanan dengan mengatur jumlah milidetik sebagai nilai reg_dword di registri di hklm system currentControlset services <service> parameter appThrottle.
Atau, NSSM dapat berhenti sejenak untuk jumlah waktu yang dapat dikonfigurasi sebelum mencoba memulai kembali aplikasi bahkan jika berhasil berjalan untuk jumlah waktu yang ditentukan oleh AppThrottle. NSSM akan berkonsultasi dengan nilai REG_DWORD di HKLM System CurrentControlset Services <Service> Parameter ApprestArtDelay untuk jumlah milidetik untuk menunggu sebelum mencoba restart. Jika persetujuan yang ditetapkan dan aplikasi ditentukan untuk menjadi tunduk pada pelambatan, NSSM akan menjeda layanan mana pun yang lebih lama dari penundaan restart yang dikonfigurasi dan periode throttle yang dihitung.
Jika persetujuan yang tidak ada atau tidak valid, hanya pelambatan yang akan diterapkan.
NSSM akan melihat dalam registri di bawah HKLM System CurrentControlset Services <servate> Parameter AppExit untuk nilai string (reg_expand_sz) yang sesuai dengan kode keluar dari aplikasi. Jika aplikasi keluar dengan kode 1, misalnya, NSSM akan mencari nilai string di bawah AppExit yang disebut "1" atau, jika tidak menemukannya, akan kembali ke nilai AppExit (default). Anda dapat mengetahui kode keluar untuk aplikasi dengan berkonsultasi dengan log acara sistem. NSSM akan mencatat kode keluar saat aplikasi keluar.
Berdasarkan data yang ditemukan dalam registri, NSSM akan mengambil satu dari tiga tindakan:
Jika data nilai adalah "restart" NSSM akan mencoba memulai kembali aplikasi seperti yang dijelaskan di atas. Ini adalah perilaku defaultnya.
Jika data nilai "abaikan" NSSM tidak akan mencoba memulai ulang aplikasi tetapi akan terus berjalan sendiri. Ini meniru perilaku SRVany (biasanya tidak diinginkan). Konsol Windows Services akan menunjukkan layanan masih berjalan meskipun aplikasi telah keluar.
Jika data nilai "keluar" NSSM akan keluar dengan anggun. Konsol Windows Services akan menunjukkan layanan sebagai berhenti. Jika Anda ingin memberikan kontrol berbutir lebih halus atas pemulihan layanan, Anda harus menggunakan kode ini dan mengedit tindakan kegagalan secara manual. Harap dicatat bahwa versi Windows sebelum Vista tidak akan menganggap jalan keluar seperti itu sebagai kegagalan. Pada versi jendela yang lebih lama Anda harus menggunakan "bunuh diri" sebagai gantinya.
Jika data nilai adalah "bunuh diri" NSSM akan mensimulasikan kerusakan dan keluar tanpa memberi tahu manajer layanan. Opsi ini hanya boleh digunakan untuk sistem pra-vista di mana Anda ingin menerapkan tindakan pemulihan layanan. Perhatikan bahwa jika aplikasi yang dipantau keluar dengan kode 0, NSSM hanya akan menghormati permintaan untuk bunuh diri jika Anda secara eksplisit mengonfigurasi kunci registri untuk kode keluar 0. Jika saja tindakan default diatur ke bunuh diri NSSM akan keluar dengan anggun.
NSSM dapat mengatur kelas prioritas dari aplikasi yang dikelola. NSSM akan melihat di registri di bawah HKLM System CurrentControlset Services <servate> parameter untuk reg_dword entri apppriority. Nilai yang valid sesuai dengan argumen untuk setPriorityClass (). Jika APPPRIORITY () tidak ada atau tidak valid, aplikasi akan diluncurkan dengan prioritas normal.
NSSM dapat mengatur afinitas CPU dari aplikasi yang dikelola. NSSM akan melihat dalam registri di bawah parameter HKLM CurrentControlset Layanan <sagerion> untuk appaffinity entri REG_SZ. Ini harus menentukan yang dipisahkan koma yang terdaftar dari ID prosesor yang diindeks nol. Berbagai prosesor dapat secara opsional ditentukan dengan tanda hubung. Tidak ada karakter lain yang diizinkan dalam string.
Misalnya, untuk menentukan yang pertama; Kedua; CPU ketiga dan kelima, Appaffinity yang sesuai adalah 0-2,4.
Jika Appaffinity hilang atau tidak valid, NSSM tidak akan berusaha membatasi aplikasi ke CPU tertentu.
Perhatikan bahwa versi 64-bit dari NSSM dapat mengonfigurasi maksimum 64 CPU dengan cara ini dan bahwa versi 32-bit dapat mengkonfigurasi maxium 32 CPU bahkan ketika berjalan pada jendela 64-bit.
Saat menghentikan layanan NSSM akan mencoba beberapa metode berbeda untuk membunuh aplikasi yang dipantau, yang masing -masing dapat dinonaktifkan jika perlu.
NSSM pertama akan berusaha untuk menghasilkan acara Control-C dan mengirimkannya ke konsol aplikasi. Script batch atau aplikasi konsol dapat mencegat acara dan menutup diri dengan anggun. Aplikasi GUI tidak memiliki konsol dan tidak akan menanggapi metode ini.
Kedua, NSSM akan menyebutkan semua jendela yang dibuat oleh aplikasi dan mengirimkannya pesan WM_CLOSE, meminta jalan keluar yang anggun.
Ketiga NSSM akan menyebutkan semua utas yang dibuat oleh aplikasi dan mengirimkannya pesan WM_QUIT, meminta jalan keluar yang anggun. Tidak semua utas aplikasi memiliki antrian pesan; Mereka yang tidak akan menanggapi metode ini.
Akhirnya NSSM akan menghubungi TerminateProcess () untuk meminta agar sistem operasi secara paksa mengakhiri aplikasi. TerminateProcess () tidak dapat terjebak atau diabaikan, jadi dalam sebagian besar keadaan aplikasi akan dibunuh. Namun, tidak ada jaminan bahwa ia akan memiliki kesempatan untuk melakukan operasi tidyup sebelum keluar.
Salah satu atau semua metode di atas dapat dinonaktifkan. NSSM akan mencari HKLM System CurrentControlset Services <servate> Parameters AppStopMethodSkip Nilai Registry yang harus dari tipe reg_dword yang diatur ke bidang bit yang menggambarkan metode mana yang tidak boleh diterapkan.
Jika AppStopMethodskip mencakup 1, Acara Control-C tidak akan dihasilkan. Jika AppStopMethodskip mencakup 2, pesan WM_CLOSE tidak akan diposting. Jika AppStopMethodskip mencakup 4, pesan WM_QUIT tidak akan diposting. Jika AppStopMethodskip mencakup 8, terminateProcess () tidak akan dipanggil.
Jika, misalnya, Anda tahu bahwa aplikasi tidak menanggapi acara Control-C dan tidak memiliki antrian pesan utas, Anda dapat mengatur AppStopMethodskip ke 5 dan NSSM tidak akan mencoba menggunakan metode tersebut untuk menghentikan aplikasi.
Berhati -hatilah saat memasukkan 8 dalam nilai AppStopMethodskip. Jika NSSM tidak memanggil terminateProcess () ada kemungkinan bahwa aplikasi tidak akan keluar ketika layanan berhenti.
Secara default NSSM akan memungkinkan proses 1500ms untuk menanggapi masing -masing metode yang dijelaskan di atas sebelum melanjutkan ke yang berikutnya. Timeout dapat dikonfigurasi berdasarkan per-metode dengan membuat entri REG_DWORD di registri di bawah parameter HKLM System CurrentControlset Services <servate> .
AppStopMethodConsole AppStopMethodWindow AppStopMethodthreads
Setiap nilai harus diatur ke jumlah milidetik untuk menunggu. Harap dicatat bahwa batas waktu berlaku untuk setiap proses di pohon proses aplikasi, sehingga waktu yang sebenarnya untuk shutdown mungkin lebih lama dari jumlah semua batas waktu yang dikonfigurasi jika aplikasi memunculkan beberapa subproses.
Untuk melewatkan menerapkan metode berhenti di atas untuk semua proses di pohon proses aplikasi, menerapkannya hanya pada proses aplikasi asli, atur HKLM System CurrentControlset Services <servate> Parameter AppKillProcessTree Registry Nilai, yang harus dari tipe Reg_DWord, ke 0.
Secara default, NSSM akan membuat jendela konsol sehingga aplikasi yang mampu membaca input pengguna dapat melakukannya - tunduk pada layanan yang diizinkan untuk berinteraksi dengan desktop.
Pembuatan konsol dapat ditekan dengan mengatur integer (reg_dword) HKLM System CurrentControlset Services <saging> Parameter AppNoconsole Registry Nilai ke 1.
NSSM dapat mengarahkan kembali I/O aplikasi yang dikelola ke jalur apa pun yang mampu dibuka oleh createFile (). Ini memungkinkan, misalnya, menangkap output log dari suatu aplikasi yang jika tidak hanya akan menulis ke konsol atau menerima input dari port serial.
NSSM akan melihat di registri di bawah parameter HKLM CurrentControlset Layanan <sagerion> untuk kunci yang sesuai dengan argumen ke createFile (). Semuanya opsional. Jika tidak ada jalur yang diberikan untuk aliran tertentu, itu tidak akan dialihkan. Jika jalur diberikan tetapi nilai -nilai lain dihilangkan, mereka akan menerima default yang masuk akal.
APPSTDIN: PATH UNTUK MENERIMA INPUT. APPSTDOUT: PATH UNTUK MENERIMA OUTPUT. APPSTDERR: Path untuk menerima output kesalahan.
Parameter untuk createFile () menyediakan dengan "appstdinshareMode", "appstdincreationonDisposition" dan "appstdinflagsandattributes" nilai (dan analog untuk stdout dan stderr).
Secara umum, jika Anda ingin layanan mencatat outputnya, atur AppStdout dan Appstderr ke jalur yang sama, misalnya C: Users public service.log, dan itu harus berfungsi. Ingat, bagaimanapun, bahwa jalur harus dapat diakses oleh pengguna yang menjalankan layanan.
Saat menggunakan pengalihan I/O, NSSM dapat memutar file output yang ada sebelum membuka STDOUT dan/atau STDERR. File yang ada akan diganti namanya dengan akhiran berdasarkan waktu penulisan terakhir file, menjadi presisi milidetik. Misalnya, file nssm.log mungkin diputar ke NSSM-20131221t113939.457.log.
NSSM akan melihat di registri di bawah HKLM System CurrentControlset Services <servate> parameter untuk entri reg_dword yang mengontrol bagaimana rotasi terjadi.
Jika presidenfile tidak ada atau diatur ke 0, rotasi dinonaktifkan. Nilai apa pun yang tidak nol memungkinkan rotasi.
Jika ProdotateConds tidak nol, sebuah file tidak akan diputar jika waktu tulis terakhirnya kurang dari jumlah detik yang diberikan di masa lalu.
Jika presidenbytes tidak nol, file tidak akan diputar jika lebih kecil dari jumlah byte yang diberikan. Ukuran file 64-bit dapat ditangani dengan menetapkan nilai non-nol dari ProtateByTeshigh.
Jika praProtatedelay tidak nol, NSSM akan berhenti untuk jumlah milidetik yang diberikan setelah rotasi.
Jika AppStDoutCopyAndTruncate atau AppStderRCopyAndTruncate tidak nol, masing-masing file stdout (atau stderr) akan diputar dengan terlebih dahulu mengambil salinan file kemudian memotong file asli ke ukuran nol. Ini memungkinkan NSSM untuk memutar file yang dipegang terbuka oleh proses lain, mencegah MOVEFILE () yang biasa berhasil. Perhatikan bahwa proses penyalinan mungkin memakan waktu jika file tersebut besar, dan untuk sementara waktu akan mengkonsumsi ruang disk dua kali lebih banyak dari file asli. Perhatikan juga bahwa aplikasi yang membaca file log mungkin tidak memperhatikan bahwa ukuran file berubah. Menggunakan opsi ini dalam hubungannya dengan PretrotatedElay dapat membantu dalam kasus itu.
Rotasi tidak tergantung pada parameter createFile () yang digunakan untuk membuka file. Mereka akan diputar terlepas dari apakah NSSM akan menambahkan atau menggantinya.
NSSM juga dapat memutar file yang mengenai ambang batas ukuran yang dikonfigurasi saat layanan sedang berjalan. Selain itu, Anda dapat memicu rotasi sesuai permintaan dengan menjalankan perintah
nssm rotate <servicename>
Rotasi sesuai permintaan akan terjadi setelah baris data berikutnya dibaca dari aplikasi yang dikelola, terlepas dari nilai prajurit. Perlu diketahui bahwa jika aplikasi tidak secara khusus bertele -tele, rotasi mungkin tidak terjadi selama beberapa waktu.
Untuk mengaktifkan rotasi online dan sesuai permintaan, atur ProtateOnline ke nilai bukan nol.
Perhatikan bahwa rotasi online mengharuskan NSSM untuk mencegat I/O aplikasi dan membuat file output atas namanya. Ini lebih kompleks dan rentan kesalahan daripada sekadar mengarahkan aliran I/O sebelum meluncurkan aplikasi. Oleh karena itu rotasi online tidak diaktifkan secara default.
Saat mengarahkan ulang output, NSSM dapat mengawali setiap baris output dengan cap waktu presisi milidetik, misalnya:
2016-09-06 10:17:09.451 Pipeline main started
Untuk mengaktifkan prefiks cap waktu, atur AppTimestAMPLOG ke nilai bukan nol.
Awalannya berlaku untuk Stdout dan Stderr. Prefixing memerlukan mencegat I/O aplikasi dengan cara yang sama seperti rotasi online. Jika rotasi log dan prefiks cap waktu keduanya diaktifkan, rotasi akan online.
NSSM dapat mengganti atau menambahkan lingkungan aplikasi yang dikelola. Dua nilai registri string multi-bernilai (REG_MULTI_SZ) diakui di bawah parameter HKLM System CurrentControlset Layanan <servate> .
Appenvironment mendefinisikan daftar variabel lingkungan yang akan mengesampingkan lingkungan layanan. Appenvironmentextra mendefinisikan daftar variabel lingkungan yang akan ditambahkan ke lingkungan layanan.
Setiap entri dalam daftar harus dari kunci formulir = nilai. Dimungkinkan untuk menghilangkan nilainya tetapi simbol = wajib.
Variabel lingkungan yang tercantum dalam appenvironment dan appenvironmentextra tunduk pada ekspansi normal, sehingga dimungkinkan, misalnya, untuk memperbarui jalur sistem dengan mengatur "path = c: bin;%jalur%" di appenvironmentextra. Variabel diperluas dalam urutan yang muncul, jadi jika Anda ingin memasukkan nilai satu variabel dalam variabel lain, Anda harus menyatakan ketergantungan terlebih dahulu.
Karena variabel yang didefinisikan dalam appenvironment mengesampingkan lingkungan yang ada, tidak mungkin untuk merujuk ke variabel apa pun yang sebelumnya didefinisikan.
Misalnya, blok appenvironment berikut:
PATH=C:WindowsSystem32;C:Windows
PATH=C:bin;%PATH%
Akan menghasilkan jalur "C: bin; C: Windows System32; C: Windows" seperti yang diharapkan.
Sedangkan blok appenvironment berikut:
PATH=C:bin;%PATH%
Akan menghasilkan jalur yang hanya berisi C: bin dan mungkin menyebabkan aplikasi gagal memulai.
Kebanyakan orang ingin menggunakan appenvironmentextra secara eksklusif. Srvany hanya mendukung appenvironment.
Pada versi 2.25, NSSM parses appenvironment dan appenvironmentextra itu sendiri, sebelum membaca nilai registri lainnya. Akibatnya sekarang dimungkinkan untuk merujuk ke variabel lingkungan khusus dalam aplikasi, AppDirectory dan parameter lainnya.
Semua Layanan Windows dapat dilewati variabel lingkungan tambahan dengan membuat nilai registri string multi-bernilai (REG_MULTI_SZ) bernama HLKM System CurrentControlset Services <service> Environment.
Isi blok lingkungan ini akan digabungkan ke lingkungan sistem sebelum layanan dimulai.
Namun, perhatikan bahwa lingkungan yang digabungkan akan diurutkan secara abjad sebelum diproses. Ini berarti bahwa dalam praktiknya Anda tidak dapat menetapkan, misalnya, Dir =%Programfiles%di Blok Lingkungan karena lingkungan yang diteruskan ke Layanan tidak akan memiliki%Programfiles%pada saat itu datang untuk mendefinisikan%dir%. Variabel lingkungan yang didefinisikan dalam appenvironmentextra tidak menderita keterbatasan ini.
Pada versi 2.25, NSSM dapat mendapatkan dan mengatur blok lingkungan menggunakan perintah yang mirip dengan:
nssm get <servicename> Environment
Perlu diulangi bahwa blok lingkungan tersedia untuk semua layanan Windows, bukan hanya layanan NSSM.
Lingkungan NSSM masuk ke aplikasi tergantung pada bagaimana berbagai nilai registri dikonfigurasi. Aliran berikut menjelaskan bagaimana lingkungan dimodifikasi.
Secara default: Layanan mewarisi lingkungan sistem.
Jika lingkungan didefinisikan: Isi lingkungan digabungkan ke dalam lingkungan.
Jika parameter appenvironment didefinisikan: Layanan mewarisi lingkungan yang ditentukan dalam lingkungan appen.
Jika parameter appenvironmentextra didefinisikan: Isi appenvironmentextra ditambahkan ke lingkungan.
Perhatikan bahwa appenvironment mengesampingkan lingkungan sistem dan blok lingkungan gabungan. Perhatikan juga bahwa AppenvironmentExtra dijamin ditambahkan ke lingkungan startup jika didefinisikan.
NSSM dapat menjalankan perintah yang dapat dikonfigurasi pengguna sebagai respons terhadap acara aplikasi. Perintah -perintah ini disebut sebagai "kait" di bawah ini.
Semua kait adalah opsional. Kait apa pun yang dijalankan akan diluncurkan dengan lingkungan yang dikonfigurasi untuk layanan. NSSM akan menempatkan variabel tambahan ke dalam lingkungan yang kait dapat diminta untuk belajar bagaimana dan mengapa mereka dipanggil.
Kait dikategorikan berdasarkan peristiwa dan tindakan. Beberapa kait dijalankan secara sinkron dan beberapa dijalankan secara tidak sinkron. Hooks diawali dengan *Asterisk dijalankan secara sinkron. NSSM akan menunggu kait ini selesai sebelum melanjutkan pekerjaannya. Namun, perhatikan bahwa semua kait tunduk pada tenggat waktu setelah itu mereka akan dibunuh, terlepas dari apakah mereka dijalankan secara tidak sinkron atau tidak.
Acara: Mulai - dipicu saat layanan diminta untuk memulai. *Tindakan: Pra - dipanggil sebelum NSSM mencoba meluncurkan aplikasi. Tindakan: Posting - Dipanggil setelah aplikasi berhasil dimulai.
Acara: Berhenti - dipicu saat layanan diminta untuk berhenti. *Tindakan: Pra - dipanggil sebelum NSSM mencoba membunuh aplikasi.
Acara: Keluar - dipicu saat aplikasi keluar. *Tindakan: Post - Dipanggil setelah NSSM telah membersihkan aplikasi.
Acara: Rotate - dipicu saat rotasi log online diminta. *Tindakan: Pra - dipanggil sebelum NSSM memutar log. Tindakan: Posting - Dipanggil setelah NSSM memutar log.
Acara: Tindakan Daya: Ubah - Dipanggil Saat Status Daya Sistem telah berubah. Tindakan: Resume - Dipanggil saat sistem telah dilanjutkan dari siaga.
Perhatikan bahwa tidak ada hook stop/post. Ini karena Exit/Post dipanggil ketika aplikasi keluar, terlepas dari apakah itu terjadi sebagai tanggapan terhadap permintaan shutdown layanan. Stop/Pre hanya dipanggil sebelum upaya shutdown yang anggun.
NSSM menetapkan variabel lingkungan NSSM_HOOK_VERSION ke angka positif. Kait dapat memeriksa nilai angka untuk menentukan variabel lingkungan lain mana yang tersedia untuk mereka.
Jika NSSM_HOOK_Version adalah 1 atau lebih besar, variabel -variabel ini disediakan:
NSSM_EXE - Path to NSSM itu sendiri. NSSM_Configuration - Bangun informasi untuk NSSM yang dapat dieksekusi, misalnya debug 64 -bit. NSSM_Version - Versi NSSM Executable. NSSM_BUILD_DATE - Bangun tanggal NSSM. NSSM_PID - Proses ID dari NSSM yang dapat dijalankan. NSSM_DEADLINE - Jumlah tenggat waktu milidetik setelah NSSM akan membunuh kait jika masih berjalan. NSSM_SERVICE_NAME - Nama layanan yang dikendalikan oleh NSSM. NSSM_SERVICE_DISPLAYNAME - Tampilan nama layanan. NSSM_COMMAND_LINE - Baris perintah yang digunakan untuk meluncurkan aplikasi. NSSM_APPLICATION_PID - ID proses proses aplikasi utama. Mungkin kosong jika prosesnya tidak berjalan. NSSM_EVENT - Kelas acara yang memicu kait. NSSM_ACTION - Tindakan peristiwa memicu kait. NSSM_TRIGGER - Kontrol layanan yang memicu kait. Mungkin kosong jika kait tidak dipicu oleh kontrol layanan, misalnya keluar/pos. NSSM_LAST_CONTROL - Kontrol layanan terakhir ditangani oleh NSSM. Nssm_start_requested_count - berapa kali aplikasi diminta untuk memulai. Nssm_start_count - berapa kali aplikasi berhasil dimulai. Nssm_throttle_count - berapa kali aplikasi berjalan kurang dari periode throttle. Reset ke nol pada awal yang sukses atau ketika layanan secara eksplisit tidak digunakan. NSSM_EXIT_COUNT - berapa kali aplikasi keluar. NSSM_EXITCODE - Kode keluar dari aplikasi. Mungkin kosong jika aplikasi masih berjalan atau belum dimulai. NSSM_RUNTIME - Jumlah milidetik yang dijalankan oleh NSSM yang dijalankan. NSSM_APPLICATION_RUNTIME - Jumlah milidetik yang dijalankan oleh aplikasi sejak terakhir dimulai. Mungkin kosong jika aplikasi belum dimulai.
Versi NSSM di masa depan dapat memberikan lebih banyak variabel lingkungan, dalam hal ini NSSM_HOOK_VERSION akan diatur ke angka yang lebih tinggi.
Hooks dikonfigurasi dengan membuat nilai String (REG_EXPAND_SZ) dalam registri yang dinamai berdasarkan tindakan kait dan ditempatkan di bawah HKLM System CurrentControlset Services <saging> Parameters AppEvents <Vent>.
Misalnya layanan dapat dikonfigurasi untuk restart ketika sistem dilanjutkan dari siaga dengan mengatur appevents power resume ke:
%NSSM_EXE% restart %NSSM_SERVICE_NAME%
Untuk mengatur kait pada baris perintah, gunakan
nssm set <servicename> AppEvents <event>/<action> <command>
Perhatikan bahwa NSSM akan membatalkan startup aplikasi jika start/pre hook mengembalikan kode keluar 99.
Layanan biasanya akan menjalankan kait dalam urutan berikut:
Mulai/pra start/post stop/pre exit/post
Jika aplikasi macet dan dimulai kembali oleh NSSM, pesanannya mungkin:
Mulai/Pra Start/Posting Exit/Posting Mulai/Pra Start/Post Stop/Pre Exit/Post
Jika NSSM mengarahkan ulang stdout atau stderr, itu dapat dikonfigurasi untuk mengarahkan kembali output dari kait yang dijalankan. Setel PredirecThooks ke 1 untuk mengaktifkan fungsi itu. Hook tentu saja dapat mengarahkan kembali I/O sendiri secara independen dari NSSM.
NSSM dapat mengedit pengaturan layanan yang ada dengan GUI yang sama yang digunakan untuk menginstalnya. Berlari
nssm edit <servicename>
untuk memunculkan GUI.
NSSM menawarkan kemampuan pengeditan terbatas untuk layanan selain yang menjalankan NSSM itu sendiri. Ketika NSSM diminta untuk mengedit layanan yang tidak memiliki pengaturan aplikasi* yang dijelaskan di atas, GUI akan mengizinkan pengeditan hanya pengaturan sistem seperti nama dan deskripsi tampilan layanan.
NSSM dapat mengambil atau mengatur parameter layanan individual dari baris perintah. Secara umum sintaks adalah sebagai berikut, meskipun lihat di bawah untuk pengecualian.
nssm get <servicename> <parameter>
nssm set <servicename> <parameter> <value>
Parameter juga dapat diatur ulang ke nilai defaultnya.
nssm reset <servicename> <parameter>
Nama parameter yang diakui oleh NSSM sama dengan nama entri registri yang dijelaskan di atas, misalnya AppDirectory.
NSSM menawarkan kemampuan pengeditan terbatas untuk layanan selain yang menjalankan NSSM itu sendiri. Parameter yang diakui adalah sebagai berikut:
Deskripsi: Deskripsi Layanan. DisplayName: Nama tampilan layanan. Lingkungan: Layanan Gabungan Lingkungan. Imagepath: Jalur ke layanan yang dapat dieksekusi. ObjectName: Akun Pengguna yang menjalankan Layanan. Nama: Nama Kunci Layanan. Mulai: Jenis startup layanan. Jenis: Jenis Layanan.
Ini sesuai dengan nilai registri di bawah kunci layanan HKLM System CurrentControlset Services <servate>.
Perhatikan bahwa NSSM akan menggabungkan semua argumen yang diteruskan pada baris perintah dengan spasi untuk membentuk nilai yang akan ditetapkan. Dengan demikian dua doa berikut akan memiliki efek yang sama.
nssm set <servicename> Description "NSSM managed service"
nssm set <servicename> Description NSSM managed service
Parameter appenvironment, appenvironmentextra dan lingkungan mengenali argumen tambahan saat menanyakan lingkungan. Sintaks berikut akan mencetak semua variabel lingkungan tambahan yang dikonfigurasi untuk suatu layanan
nssm get <servicename> AppEnvironmentExtra
Sedangkan sintaks di bawah ini hanya akan mencetak nilai variabel ClassPath jika dikonfigurasi di blok lingkungan, atau string kosong jika tidak dikonfigurasi.
nssm get <servicename> AppEnvironmentExtra CLASSPATH
Saat mengatur blok lingkungan, setiap variabel harus ditentukan sebagai kunci = pasangan nilai dalam argumen baris perintah terpisah. Misalnya:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes TEMP=C:Temp
Atau kuncinya dapat diawali dengan simbol + atau - untuk masing -masing menambah atau menghapus pasangan dari blok.
Dua baris berikut mengatur classpath dan suhu:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
Jika kunci sudah ada, menentukan +kunci akan mengganti nilai sambil menjaga urutan kunci:
nssm set <servicename> AppEnvironment +CLASSPATH=C:NewClasses
Sintaks berikut menghilangkan variabel tunggal dari blok sambil meninggalkan variabel lain di tempatnya.
nssm set <servicename> AppEnvironment -TEMP
Menentukan -key = nilai akan menghapus variabel hanya jika nilai yang ada cocok.
Sintaks berikut tidak akan menghapus temp = c: temp
nssm set <servicename> AppEnvironment -TEMP=C:WorkTemporary
Simbol + dan - adalah karakter yang valid dalam variabel lingkungan. Sintaks: key = nilai setara dengan key = nilai dan dapat digunakan untuk mengatur variabel yang dimulai dengan +/- atau untuk secara eksplisit mengatur ulang blok dalam skrip:
nssm set <servicename> AppEnvironment :CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
Parameter AppExit memerlukan argumen tambahan yang menentukan kode keluar untuk mendapatkan atau mengatur. Tindakan default dapat ditentukan dengan string default.
Misalnya, untuk mendapatkan tindakan keluar default untuk layanan yang harus Anda jalankan
nssm get <servicename> AppExit Default
Untuk mendapatkan tindakan keluar saat aplikasi keluar dengan kode keluar 2, jalankan
nssm get <servicename> AppExit 2
Perhatikan bahwa jika tidak ada tindakan eksplisit yang dikonfigurasi untuk kode keluar yang ditentukan, NSSM akan mencetak tindakan keluar default.
Untuk mengatur konfigurasi layanan untuk berhenti saat aplikasi keluar dengan kode keluar 2, jalankan
nssm set <servicename> AppExit 2 Exit
Parameter APPPriority digunakan untuk mengatur kelas prioritas dari aplikasi yang dikelola. Prioritas yang valid adalah sebagai berikut:
RealTime_Priority_Class high_priority_class di atas_normal_prioritity_class normal_priority_class di bawah_normal_priority_class IDLE_PRIORITY_CLASS
Parameter DependEngroup dan Dependervice digunakan untuk meminta atau mengatur dependensi untuk layanan. Saat menetapkan dependensi, setiap grup layanan atau layanan (didahului dengan simbol +) harus ditentukan dalam argumen baris perintah yang terpisah. Misalnya:
nssm set <servicename> DependOnService RpcSs LanmanWorkstation
Atau nama ketergantungan dapat diawali dengan simbol + atau - untuk masing -masing menambah atau menghapus ketergantungan.
Dua baris berikut menetapkan dependensi pada RPCSS dan LanmanWorkStation:
nssm set <servicename> DependOnService RpcSs
nssm set <servicename> DependOnService +LanmanWorkstation
Sintaks follwing menghilangkan ketergantungan pada RPCSS:
nssm set <servicename> DependOnService -RpcSs
Kelompok layanan harus, secara ketat, diawali dengan simbol +. Untuk menentukan ketergantungan tunggal pada suatu grup, simbol + dapat diawali dengan simbol:.
Baris -baris berikut setara, dan masing -masing menetapkan ketergantungan hanya pada NetBioSgroup:
nssm set <servicename> DependOnGroup NetBIOSGroup
nssm set <servicename> DependOnGroup :NetBIOSGroup
nssm set <servicename> DependOnGroup :+NetBIOSGroup
Sedangkan baris ini menambah dependensi yang ada:
nssm set <servicename> DependOnGroup +NetBIOSGroup
nssm set <servicename> DependOnGroup ++NetBIOSGroup
Parameter nama hanya dapat ditanya, bukan diatur. Ini mengembalikan nama kunci registri layanan. Ini mungkin berguna untuk mengetahui jika Anda memanfaatkan fakta bahwa Anda dapat mengganti nama tampilan layanan di mana saja di mana sintaksnya memanggil.
Parameter ObjectName membutuhkan argumen tambahan hanya saat mengatur nama pengguna. Argumen tambahan adalah kata sandi pengguna.
Untuk mengambil nama pengguna, jalankan
nssm get <servicename> ObjectName
Untuk mengatur nama pengguna dan kata sandi, jalankan
nssm set <servicename> ObjectName <username> <password>
Perhatikan bahwa aturan penggabungan argumen masih berlaku. Doa berikut ini valid dan akan memiliki efek yang diharapkan.
nssm set <servicename> ObjectName <username> correct horse battery staple
Nama pengguna terkenal berikut tidak memerlukan kata sandi. Parameter kata sandi dapat dihilangkan saat menggunakannya:
"Localsystem" alias "System" alias "nt Authority System" "LocalService" alias "Layanan Lokal" alias "Otoritas Lokal" Layanan Lokal "" Networkservice "alias" Layanan Jaringan "alias" Otoritas NT Layanan Jaringan "Layanan Virtual" Layanan NT <viceCeName> ""
Parameter Mulai digunakan untuk meminta atau mengatur jenis startup dari layanan. Jenis startup layanan yang valid adalah sebagai berikut:
Service_auto_start: Startup otomatis saat boot. Service_delayed_start: startup tertunda saat boot. Service_demand_start: startup layanan manual. Service_Disabled: Layanan dinonaktifkan.
Perhatikan bahwa service_delayed_start tidak didukung pada versi Windows sebelum Vista. NSSM akan mengatur layanan ke startup otomatis jika start tertunda tidak tersedia.
Parameter tipe digunakan untuk meminta atau mengatur jenis layanan. NSSM mengenali semua jenis layanan yang saat ini didokumentasikan tetapi hanya akan memungkinkan pengaturan salah satu dari dua jenis:
Service_win32_own_process: Layanan mandiri. Ini adalah default. Service_interactive_process: Layanan yang dapat berinteraksi dengan desktop.
Perhatikan bahwa layanan hanya dapat dikonfigurasi sebagai interaktif jika dijalankan di bawah akun Localsystem. Cara aman untuk mengonfigurasi layanan interaktif adalah dalam dua tahap sebagai berikut.
nssm reset <servicename> ObjectName
nssm set <servicename> Type SERVICE_INTERACTIVE_PROCESS
NSSM menawarkan fitur kontrol layanan yang belum sempurna.
nssm start <servicename>
nssm restart <servicename>
nssm stop <servicename>
nssm status <servicename>
nssm statuscode <servicename>
Output dari "Status NSSM" dan "NSSM StatusCode" adalah string yang mewakili status layanan, misalnya service_running.
Kode keluar dari "status NSSM" akan menjadi 0 jika status itu berhasil diambil. Jika kode keluar tidak nol ada kesalahan.
Kode keluar dari "NSSM StatusCode" akan menjadi nilai numerik dari status layanan, misalnya 4 untuk layanan_running. Nol bukan kode status layanan yang valid. Jika kode keluar nol ada kesalahan.
NSSM juga dapat menghapus layanan. Berlari
nssm remove <servicename>
untuk menghapus layanan. Anda akan diminta untuk konfirmasi sebelum layanan dihapus. Cobalah untuk tidak menghapus layanan sistem penting ...
Untuk menghapus layanan tanpa konfirmasi dari GUI, jalankan
nssm remove <servicename> confirm
Cobalah untuk tidak menghapus layanan sistem penting ...
Log NSSM ke log Event Windows. Ini mendaftarkan dirinya sebagai sumber log peristiwa dan menggunakan ID acara unik untuk setiap jenis pesan itu log. Versi baru dapat menambah jenis acara tetapi ID acara yang ada tidak akan pernah diubah.
Karena cara NSSM mendaftar sendiri, Anda harus menyadari bahwa Anda mungkin tidak dapat mengganti biner NSSM jika Anda memiliki penampil acara terbuka dan bahwa menjalankan beberapa contoh NSSM dari lokasi yang berbeda mungkin membingungkan jika mereka tidak semua versi yang sama.
Perintah berikut akan mencetak nama semua layanan yang dikelola oleh NSSM:
nssm list
Untuk melihat semua layanan pada sistem, bukan hanya NSSM, gunakan daftar semua:
nssm list all
Perintah berikut akan mencetak ID proses dan jalur proses yang dapat dieksekusi dimulai dengan layanan yang diberikan:
nssm processes <servicename>
Perhatikan bahwa jika NSSM 32-bit dijalankan pada sistem 64-bit yang menjalankan versi Windows yang lebih lama dari Vista, ia tidak akan dapat meminta jalur proses 64-bit.
NSSM dapat membuang perintah yang akan menciptakan kembali konfigurasi layanan. Output dapat ditempelkan ke dalam skrip batch untuk mencadangkan layanan atau transfer ke komputer lain.
nssm dump <servicename>
Karena konfigurasi layanan mungkin berisi karakter yang perlu dikutip atau dilarikan dari prompt perintah, NSSM berusaha keras untuk menghasilkan output yang akan bekerja dengan benar ketika dijalankan sebagai skrip, dengan menambahkan kutipan dan pelarian caret yang sesuai.
Untuk memfasilitasi penyalinan layanan, perintah dump menerima argumen kedua yang menentukan nama layanan yang akan digunakan dalam output.
nssm dump <servicename> <newname>
Baris di tempat pembuangan akan merujuk pada layanan sambil menunjukkan konfigurasi.
Untuk menginstal server turnamen yang tidak nyata:
nssm install UT2004 c:gamesut2004systemucc.exe server
Untuk menjalankan server sebagai pengguna "Game":
nssm set UT2004 ObjectName games password
Untuk mengonfigurasi server untuk masuk ke file:
nssm set UT2004 AppStdout c:gamesut2004service.log
To restrict the server to a single CPU:
nssm set UT2004 AppAffinity 0
To remove the server:
nssm remove UT2004 confirm
To find out the service name of a service with a display name:
nssm get "Background Intelligent Transfer Service" Name
NSSM is known to compile with Visual Studio 2008 and later. Older Visual Studio releases may or may not work if you install an appropriate SDK and edit the nssm.vcproj and nssm.sln files to set a lower version number. They are known not to work with default settings.
NSSM will also compile with Visual Studio 2010 but the resulting executable will not run on versions of Windows older than XP SP2. If you require compatiblity with older Windows releases you should change the Platform Toolset to v90 in the General section of the project's Configuration Properties.
Thanks to Bernard Loh for finding a bug with service recovery. Thanks to Benjamin Mayrargue (www.softlion.com) for adding 64-bit support. Thanks to Joel Reingold for spotting a command line truncation bug. Thanks to Arve Knudsen for spotting that child processes of the monitored application could be left running on service shutdown, and that a missing registry value for AppDirectory confused NSSM. Thanks to Peter Wagemans and Laszlo Keresztfalvi for suggesting throttling restarts. Thanks to Eugene Lifshitz for finding an edge case in CreateProcess() and for advising how to build messages.mc correctly in paths containing spaces. Thanks to Rob Sharp for pointing out that NSSM did not respect the AppEnvironment registry value used by srvany. Thanks to Szymon Nowak for help with Windows 2000 compatibility. Thanks to François-Régis Tardy and Gildas le Nadan for French translation. Thanks to Emilio Frini for spotting that French was inadvertently set as the default language when the user's display language was not translated. Thanks to Riccardo Gusmeroli and Marco Certelli for Italian translation. Thanks to Eric Cheldelin for the inspiration to generate a Control-C event on shutdown. Thanks to Brian Baxter for suggesting how to escape quotes from the command prompt. Thanks to Russ Holmann for suggesting that the shutdown timeout be configurable. Thanks to Paul Spause for spotting a bug with default registry entries. Thanks to BUGHUNTER for spotting more GUI bugs. Thanks to Doug Watson for suggesting file rotation. Thanks to Арслан Сайдуганов for suggesting setting process priority. Thanks to Robert Middleton for suggestion and draft implementation of process affinity support. Thanks to Andrew RedzMax for suggesting an unconditional restart delay. Thanks to Bryan Senseman for noticing that applications with redirected stdout and/or stderr which attempt to read from stdin would fail. Thanks to Czenda Czendov for help with Visual Studio 2013 and Server 2012R2. Thanks to Alessandro Gherardi for reporting and draft fix of the bug whereby the second restart of the application would have a corrupted environment. Thanks to Hadrien Kohl for suggesting to disable the console window's menu. Thanks to Allen Vailliencourt for noticing bugs with configuring the service to run under a local user account. Thanks to Sam Townsend for noticing a regression with TerminateProcess(). Thanks to Barrett Lewis for suggesting the option to skip terminating the application's child processes. Thanks to Miguel Angel Terrón for suggesting copy/truncate rotation. Thanks to Yuriy Lesiuk for suggesting setting the environment before querying the registry for parameters. Thanks to Gerald Haider for noticing that installing a service with NSSM in a path containing spaces was technically a security vulnerability. Thanks to Scott Ware for reporting a crash saving the environment on XP 32-bit. Thanks to Stefan and Michael Scherer for reporting a bug writing the event messages source. Thanks to Paul Baxter for help with Visual Studio 2015. Thanks to Mathias Breiner for help with Visual Studio and some registry fixes. Thanks to David Bremner for general tidyups. Thanks to Nabil Redmann for suggesting redirecting hooks' output. Thanks to Bader Aldurai for suggesting the process tree. Thanks to Christian Long for suggesting virtual accounts. Thanks to Marcin Lewandowski for spotting a bug appending to large files. Thanks to Nicolas Ducrocq for suggesting timestamping redirected output. Thanks to Meang Akira Tanaka for suggestion and initial implementation of the statuscode command. Thanks to Kirill Kovalenko for reporting a crash with NANO server. Thanks to Connor Reynolds for spotting a potential buffer overflow. Thanks to foi for spotting a hang with 64 cores.
NSSM is public domain. You may unconditionally use it and/or its source code for any purpose you wish.