Đôi khi bạn cần một ứng dụng hoặc script chạy liên tục dù bạn có đăng nhập vào máy tính hay không. Có thể là script PowerShell giám sát cổng hoặc web server host trang web trên mạng gia đình.
Điểm chính là nếu bạn muốn một tiến trình, script hoặc chương trình chạy miễn là máy tính còn bật, bạn sẽ cần tạo một Windows Service.
Cần gì để tạo Windows Service?
Để tạo Windows service trên Windows 10, có một số điều kiện tiên quyết:
- Quyền Administrator trên máy tính
- Đối tượng để chạy dưới dạng service (Script PowerShell, chương trình, v.v.)
- Non-Sucking Service Manager (NSSM) đã cài đặt
Non-Sucking Service Manager (NSSM) là gì?
Có, bạn không thể đưa ra tên như thế mà không giải thích. Tên nghe có vẻ "không chuyên nghiệp", nhưng nó chính xác. Non-Sucking Service Manager (NSSM) là cách dễ dàng nhất để tạo Windows service vừa đáng tin cậy vừa cấu hình linh hoạt. Thêm vào đó, nó miễn phí và là phần mềm mã nguồn mở (OSS).
NSSM có thể dùng qua Command Prompt hoặc giao diện đồ họa (GUI), nghĩa là ai cũng dùng được. NSSM hoạt động trên mọi phiên bản Windows từ Windows 2000 trở lên. Có bản 32-bit và 64-bit. Nếu bạn dùng máy 64-bit, hãy thử bản 64-bit trước. Nếu không chạy được, quay lại bản 32-bit.
Bạn có thể tải NSSM từ trang web chính thức, clone từ Git, hoặc cài qua Chocolatey (trình quản lý gói cho Windows). Phương pháp cài đặt sẽ khác tùy theo lựa chọn. Vui lòng tham khảo hướng dẫn của NSSM. Trong ví dụ này, chúng tôi tải từ trang web NSSM và cài đặt tại C:\WINDOWS\system32.
Tạo Windows Service với NSSM
Trong ví dụ này, chúng ta sẽ tạo service từ script PowerShell ghi log phần trăm tải CPU trung bình.
- Sao chép và lưu script dưới dạng log-CPULoadPercentage.ps1 vào nơi không dễ bị truy cập. Thử tạo thư mục C:/Scripts và lưu ở đó. Cũng tạo thư mục Logs trong Scripts. Đường dẫn script là C:/Scripts/log-CPULoadPercentage.ps1. Bạn sẽ cần đường dẫn này sau.
Lưu ý: Tất cả dòng sau theo sau ký hiệu # là comment và không ảnh hưởng đến script.
CLS #Tùy chọn. Tôi thích dùng để xóa terminal khi test. #Đảm bảo có thư mục Logs cùng thư mục với script #Log là nơi lưu bản ghi. Start-Transcript -Path "$PSScriptRoot\Logs\log-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append #Vòng lặp While giữ chạy cho đến khi dừng thủ công While ($True){ #Tạo timestamp biết lúc đo $timeStamp = get-date -f yyyy-MM-h:mm:ss #Lấy % tải trung bình lúc đó, rồi chờ 5 giây đo lại. $cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5 #Tách riêng giá trị Average tránh chuỗi @{Average=13} $cpuLoadPercent = $cpuLoadPercent.Average #Ghi kết quả ra màn hình, ở đây là ra log Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent" } Stop-Transcript
- Có thể làm trong Windows Command Prompt hoặc PowerShell. Mở với quyền Administrator.
- Nhập lệnh nssm install logCPUAvg và chạy. Cửa sổ NSSM service installer sẽ mở ra.
- Nhấn nút ba chấm (...) bên cạnh trường Path:, điều hướng đến powershell.exe thường ở C:\Windows\System32\. Chọn powershell.exe. Các trường Path: và Startup directory: sẽ tự động điền.
- Nhập sau vào trường Arguments:: -ExecutionPolicy Bypass -NoProfile -File “C:\PathToScript\get-Script.ps1”, trong đó phần cuối là đường dẫn đến script PowerShell và tên script.
- Chọn tab Details. Nhập tên hiển thị trong Windows Services manager vào Display name:. Nhập mô tả vào Description:. Startup type: có thể là Automatic, Automatic (Delayed Start), Manual, hoặc Disabled. Cho bài tập này, Automatic là tốt.
- Chọn tab Log on. Chọn radio button This account và nhập tài khoản, mật khẩu mà service sẽ chạy dưới quyền đó. Bạn cần chọn tài khoản Windows để chạy service. Lý tưởng là tạo tài khoản riêng chỉ cho service này. Quyền tài khoản nên giới hạn chỉ những gì service cần. Bạn có thể chọn Local System account nhưng không khuyến khích vì lý do bảo mật.
Có một số tab khác để tùy chỉnh service. Cho bài tập này, giá trị mặc định ở các tab đó đã đủ. Nhấn nút Install service.
- Khi service cài đặt xong, bạn sẽ thấy cửa sổ Service "logCPUAvg" installed successfully!. Nhấn OK để đóng. Kết thúc cài đặt.
- Mở Windows Services Manager và kiểm tra service có ở đó không.
- Chạy service để đảm bảo nó hoạt động.
- Để xác minh service đang chạy, dùng File Explorer điều hướng đến nơi log được lưu để xem file có tồn tại không.
Xóa Windows Service với NSSM
Có thể bạn không còn cần theo dõi tải CPU, muốn xóa service. May mắn NSSM làm điều này dễ dàng.
- Trong Windows Services Manager, dừng service. Chọn service Log CPU Average Load rồi nhấn nút dừng vuông trên thanh công cụ hoặc liên kết Stop the service bên trái.
- Mở Windows Command Prompt hoặc PowerShell quyền Administrator.
- Nhập lệnh nssm remove logCPUAvg và thực thi.
- NSSM sẽ hỏi xác nhận. Chọn Yes.
- Khi service bị xóa, bạn sẽ thấy xác nhận Service "logCPUAvg" removed successfully!. Nhấn OK và xong.
Đó là tất cả. Nên kiểm tra Services Manager đảm bảo service không còn đó. Nếu vẫn thấy, hãy làm mới màn hình và nó sẽ biến mất.
Service là cách tuyệt vời để chạy app/script cần chạy liên tục, tự khởi động lại nếu thất bại, hoặc cần đặc quyền khác với user hiện tại. Nếu app/script không cần những điều đó, hãy cân nhắc dùng Scheduled Task thay thế.