Panduan Pasukan Lucee MY

Lucee di Windows sebagai servis: tanda aras dan PATH

Pasang Lucee sebagai servis Windows dengan sc.exe dan nssm, akaun servis, PATH dan JAVA_HOME, tanda aras CPU memori, dan masalah selepas naik taraf Java.

Lucee di Windows sebagai servis: tanda aras dan PATH
0
Kandungan

Lucee di Windows sebagai servis: tanda aras dan PATH

Penulis: Thalhah · Tarikh: 12 Oktober 2026

Apabila Lucee dipasang dengan pemasang rasmi pada Windows, ia mendaftarkan servis Windows bernama lucee yang berjalan di atas Tomcat. Memahami akaun yang menjalankannya dan dari mana servis membaca PATH serta JAVA_HOME memisahkan pelayan yang stabil daripada pelayan yang gagal pada hujung minggu. Artikel ini menerangkan pemasangan servis dengan sc.exe dan nssm, kebenaran folder, perbezaan servis lawan konsol, tanda aras prestasi, dan masalah selepas naik taraf Java.

Servis lalai daripada pemasang Lucee

Pemasang Lucee untuk Windows memasang Tomcat, JDK sendiri daripada Eclipse Adoptium, dan mendaftarkan servis Windows. Servis itu biasanya bernama lucee, dengan nama paparan seperti "Apache Tomcat 9.0 Lucee". Urus ia terus dari baris arahan:

net start lucee
net stop lucee
sc.exe query lucee

Port lalai ialah 8888 dan direktori pemasangan berada di bawah c:\lucee\tomcat. Untuk panduan pemasangan penuh, rujuk panduan memasang Lucee. Untuk menyemak laluan binari dan akaun yang menjalankannya:

sc.exe qc lucee

Output memaparkan BINARY_PATH_NAME, iaitu arahan procrun, dan SERVICE_START_NAME, iaitu akaun servis. Kedua-dua nilai ini ialah titik permulaan bagi hampir setiap masalah yang dibincangkan.

Memasang servis dengan sc.exe

sc.exe ialah alat terbina dalam untuk mendaftar servis Windows. Satu peraturan kecil yang kerap menggagalkan arahan: ruang selepas tanda sama adalah wajib, jadi tulis binPath= dengan ruang selepasnya.

Satu had penting: sc.exe hanya mendaftar boleh laku yang memahami protokol servis Windows (yang melaksanakan ServiceMain), bukan java.exe. Untuk Lucee pada Tomcat, boleh laku servis ialah procrun, iaitu fail tomcat9.exe dalam folder bin Tomcat:

sc.exe create lucee binPath= "\"C:\lucee\tomcat\bin\tomcat9.exe\" //RS//lucee" start= auto DisplayName= "Lucee CFML Server"
sc.exe start lucee

Argumen //RS// menyuruh procrun menjalankan servis bernama lucee. Tanda petik dalaman mesti dilepaskan dengan garis condong belakang. PowerShell menyediakan laluan yang lebih mudah dibaca:

New-Service -Name "lucee" -BinaryPathName '"C:\lucee\tomcat\bin\tomcat9.exe" //RS//lucee' -DisplayName "Lucee CFML Server" -StartupType Automatic
Start-Service lucee

Dalam amalan, memasang servis Tomcat lebih kerap dilakukan terus melalui procrun dengan //IS// untuk pasang dan //US// untuk kemas kini, dan tomcat9w.exe untuk panel grafik.

nssm sebagai alternatif

nssm, singkatan Non-Sucking Service Manager, membungkus sebarang boleh laku termasuk java.exe menjadi servis. Ini berguna untuk menjalankan Lucee Express atau jar Lucee terus tanpa Tomcat:

nssm install lucee "C:\Program Files\Eclipse Adoptium\jdk-21.0.6.7-hotspot\bin\java.exe"
nssm set lucee AppParameters "-jar C:\lucee\lib\lucee.jar"
nssm set lucee AppDirectory "C:\lucee"
nssm set lucee AppEnvironmentExtra "JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-21.0.6.7-hotspot"
nssm set lucee Start SERVICE_AUTO_START
nssm start lucee

AppDirectory menetapkan direktori kerja, dan AppEnvironmentExtra menambah pemboleh ubah persekitaran dalam bentuk NAMA=nilai. Tanpa AppDirectory, direktori kerja menjadi C:\Windows\System32, punca biasa fail konfigurasi tidak dijumpai.

Akaun servis dan kebenaran folder

Secara lalai servis berjalan sebagai LocalSystem, yang mudah tetapi memberi kuasa terlalu besar: sebarang kecacatan keselamatan dalam aplikasi mendapat akses penuh ke mesin. Untuk pengeluaran, gunakan akaun khas dengan keistimewaan minimum, atau akaun terbina dalam yang lebih sempit seperti NT AUTHORITY\NetworkService:

sc.exe config lucee obj= ".\svc-lucee" password= "kata-laluan-kuat"

Akaun itu perlu hak "log on as a service"; Windows memberikannya secara automatik apabila anda menetapkan akaun melalui sc.exe config atau panel Services. Akaun baharu itu mesti boleh membaca direktori pemasangan dan menulis ke folder kerja, log, dan muat naik:

icacls "C:\lucee" /grant "svc-lucee:(OI)(CI)(RX)"
icacls "C:\lucee\tomcat\lucee-server" /grant "svc-lucee:(OI)(CI)(M)"
icacls "C:\lucee\tomcat\logs" /grant "svc-lucee:(OI)(CI)(M)"

RX bermaksud baca dan laksana, M bermaksud ubah suai. Untuk butiran kebenaran folder muat naik, rujuk panduan kebenaran fail muat naik.

PATH dan JAVA_HOME

Perbezaan yang paling kerap diabaikan ialah servis tidak membaca PATH pengguna yang sedang log masuk. Servis mewarisi pemboleh ubah persekitaran sistem, bukan pemboleh ubah pengguna.

Apabila anda menaik taraf Java, JAVA_HOME dan PATH sistem yang lama kekal sehingga dikemas kini. Tetapkan pada peringkat sistem:

setx /M JAVA_HOME "C:\Program Files\Eclipse Adoptium\jdk-21.0.6.7-hotspot"

setx /M menulis ke peringkat sistem, tetapi tidak mengemas kini proses yang sedang berjalan. Servis menyimpan persekitarannya semasa dimulakan, jadi selepas menukar pemboleh ubah sistem, mulakan semula servis atau but semula Windows.

Satu perangkap yang lebih halus: skrip catalina.bat menggunakan JRE_HOME atau JAVA_HOME apabila dijalankan dari konsol, tetapi servis procrun menyimpan laluan Java dalam pendaftaran dan tidak membaca JAVA_HOME semasa mula. Kemas kini melalui tomcat9w.exe atau argumen --Jvm.

Perbezaan servis lawan konsol

Servis berjalan dalam konteks berbeza daripada konsol, dan tiga perbezaan ini menyebabkan kebanyakan pepijat yang sukar dikesan.

Pertama, direktori kerja. Servis bermula dalam C:\Windows\System32, bukan folder tempat anda melancarkannya. Laluan relatif dalam aplikasi, contohnya config/application.json, diselesaikan terhadap System32 dan gagal secara senyap. Cara paling teguh ialah membina laluan mutlak dalam CFML:

baseDir = getDirectoryFromPath( getCurrentTemplatePath() );
configFile = baseDir & "config/application.json";

Untuk servis nssm, anda juga boleh menetapkan direktori kerja dengan AppDirectory.

Kedua, pemacu rangkaian tidak dipetakan. Huruf pemacu yang dipetakan dengan net use atau File Explorer, seperti Z:, adalah milik sesi pengguna dan tidak wujud untuk servis. Akses rangkaian mesti menggunakan laluan UNC, dan akaun servis perlu kebenaran pada kongsi itu.

Ketiga, profil pengguna tidak dimuatkan. Servis tidak membaca HKCU atau %APPDATA% pengguna interaktif. Kod yang menulis ke %USERPROFILE% menulis ke profil akaun servis, atau terus gagal.

Tanda aras prestasi dalam Windows

Pantau tiga penunjuk untuk kesihatan Lucee sebagai servis: CPU, memori, dan pengendali fail. Cara terpantas ialah PowerShell:

Get-Process tomcat9 -ErrorAction SilentlyContinue | Select-Object Name,Id,CPU,WorkingSet64,Handles

Nama proses bergantung kepada cara servis dipasang: tomcat9.exe untuk pemasang rasmi, java.exe untuk nssm.

CPU. Properti CPU memaparkan jumlah masa pemproses dalam saat. Nilai yang meningkat pantas menunjukkan gelung tak terhingga, rekursi tanpa henti, atau pengumpulan sampah yang bergelut. Untuk peratusan langsung, gunakan Performance Monitor (perfmon) dengan pembilang Process% Processor Time.

Memori. WorkingSet64 memaparkan memori fizikal proses dalam bait. Bagi JVM, perkara penting ialah sama ada memori berkembang menghala ke had -Xmx sebelum membuang OutOfMemoryError. Untuk menala saiz timbunan, rujuk panduan tala JVM.

Pengendali fail. Sifat Handles memaparkan bilangan pengendali yang dibuka. Bilangan yang meningkat tanpa had menandakan kebocoran, contohnya sambungan atau fail dibuka tanpa ditutup. Windows menghadkan pengendali setiap proses, jadi aplikasi yang bocor akhirnya gagal membuka fail baharu. Untuk pandangan langsung, gunakan Resource Monitor (resmon) atau Process Explorer. Untuk pemantauan berterusan, rujuk panduan log dan pemantauan CFML.

Masalah biasa selepas naik taraf Java

Naik taraf Java ialah punca paling biasa servis Lucee tiba-tiba gagal, dan hampir semuanya berpunca daripada laluan yang masih menunjuk ke versi lama. JAVA_HOME menunjuk ke JDK yang sudah dipadam, jadi servis melaporkan fail tidak dijumpai. PATH sistem masih menyenaraikan Java lama dahulu, jadi konsol dan servis menggunakan versi berbeza. Servis procrun menyimpan laluan Java dalam pendaftaran, jadi ia terus menggunakan JDK lama walaupun JAVA_HOME sudah dikemas kini. Servis tidak dimulakan semula selepas naik taraf, jadi JVM lama masih dalam memori. Versi Java baharu mungkin tidak serasi dengan Lucee lama, jadi semak keperluan Java dahulu. Jika Lucee berjalan di belakang pelayan web, sahkan penyambungnya, seperti dalam panduan Lucee di belakang IIS.

Jadual masalah cepat

GejalaPuncaPembetulan
Servis tidak mula, ralat 1053binPath menunjuk Java atau fail yang hilangSemak sc.exe qc, betulkan laluan, pasang semula servis
"The system cannot find the path specified"JAVA_HOME atau PATH lama selepas naik tarafKemas kini pemboleh ubah sistem, mulakan semula servis atau but semula
Lucee masih guna Java lamaprocrun menyimpan laluan Java dalam pendaftaranKemas kini melalui tomcat9w.exe atau argumen --Jvm
Fail muat naik atau log tidak ditulisAkaun servis tiada kebenaran tulisicacls /grant M pada folder terlibat
Fail konfigurasi tidak dijumpaiDirektori kerja System32Guna laluan mutlak atau tetapkan direktori kerja
Pemacu Z: tidak dapat diaksesPemacu dipetakan milik sesi penggunaGuna laluan UNC \pelayan\kongsi
Memori naik hingga OutOfMemoryHad -Xmx rendah atau kebocoranTala timbunan JVM, periksa pengendali fail

Soalan Lazim (FAQ)

Bagaimana saya tahu nama servis Lucee?

Jalankan sc.exe query dan cari entri Lucee atau Tomcat, atau buka panel Services dan cari nama paparan "Apache Tomcat 9.0 Lucee".

Adakah sc.exe boleh menghalakan terus ke java.exe?

Tidak. sc.exe hanya mendaftar boleh laku yang memahami protokol servis Windows. Gunakan procrun Tomcat atau nssm untuk membungkus Java.

Mengapa JAVA_HOME tidak mengubah Java yang digunakan servis?

Servis procrun menyimpan laluan Java dalam pendaftaran dan tidak membaca JAVA_HOME semasa mula. Kemas kini melalui tomcat9w.exe, atau bagi servis nssm tetapkan AppEnvironmentExtra.

Mengapa aplikasi saya tidak jumpa fail selepas dipasang sebagai servis?

Direktori kerja servis ialah C:\Windows\System32. Gunakan laluan mutlak dengan getDirectoryFromPath(getCurrentTemplatePath()), atau tetapkan direktori kerja.

Adakah pemacu rangkaian dipetakan tersedia kepada servis?

Tidak. Pemacu dipetakan ialah sesi pengguna. Gunakan laluan UNC dan beri akaun servis kebenaran pada kongsi.

Sumber

Senarai semak

  • [ ] Pemasang Lucee telah mendaftarkan servis dan net start lucee berjaya
  • [ ] sc.exe qc lucee memaparkan laluan binari dan akaun yang betul
  • [ ] Akaun servis khas ditetapkan dengan kebenaran minimum, bukan LocalSystem untuk pengeluaran
  • [ ] Kebenaran icacls diberikan untuk baca pada pemasangan dan tulis pada log serta muat naik
  • [ ] JAVA_HOME dan PATH ditetapkan pada peringkat sistem, bukan pengguna
  • [ ] Laluan Java servis procrun dikemas kini selepas naik taraf Java
  • [ ] Aplikasi menggunakan laluan mutlak atau direktori kerja ditetapkan
  • [ ] Semua akses rangkaian menggunakan UNC, bukan pemacu yang dipetakan
  • [ ] CPU, memori, dan bilangan pengendali dicatatkan sebagai tanda aras asas
  • [ ] Servis dimulakan semula selepas sebarang perubahan persekitaran
Bab 9 daripada 9

Pentadbiran Lucee 7.1

Log masuk untuk menyimpan kemajuan bacaan anda.

0 komen

0 komen

Log masuk untuk menjawab atau memberi komen.

Log masuk