利用pyinstaller+nssm將python程序打包為exe並封裝為系統服務,實現開機自啟/后台運行
emmmm…最近沉迷python,讓我再寫一篇python的博客。
前面有一篇文章,做了一個python的客戶端和一個服務端,通過sockets通信;客戶端運行在家里的win10 電腦上,服務端運行在阿里雲的centos上。客戶端可以主動監測自己的公網IP地址,並定時上報給服務端。
https://www.xiaoweigod.com/network/1588.html
客戶端的確做得比較簡陋,甚至連數據校驗都沒做,一切都通過服務端來判斷數據的合法性。不過更致命的是,我每次開機都要手動去點開這個客戶端,讓它保持運行,然后,客戶端運行的時候還會占用一個窗口,經常不小心就關掉了,程序運行如下圖。。每次出門得檢查下客戶端有沒有在運行,然后不放心還開個teamviewer。現在下決心要解決掉這個問題了。
怎么做呢?步驟分為兩步,第一步是把python程序打包成windows的可執行程序,第二步把這個可執行程序再封裝為系統服務。而系統服務運行的話是后台形式的,不會顯示任何窗口,並且可以很方便地實現開機啟動。
准備工具/環境要求:winxp到win10都可以,已經安裝完了python環境的電腦。
一、使用pyinstaller將python程序打包為exe可執行程序
1 win(ctrl和alt之間的旗子鍵)+R,打開運行,cmd
2 直接執行:
pip install pyinstaller
安裝成功后會顯示:
Successfully installed pyinstaller-3.3.1
3 進入python程序的文件夾,打包程序(比如我的程序在E盤)
pyinstaller -F E:\DDNS_clent.py
注意:加入-F參數表示打包成單一exe程序
完成如圖,exe程序路徑在倒數第二行:
我們打開這個exe文件運行一下,確保沒問題:
二、使用nssm將exe可執行程序注冊為系統服務
1 nssm下載地址:https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip
下載完了解壓,會得到一個文件夾,內容如圖:
2 根據你的系統是32位的還是64位的,進入相應的文件夾,將文件夾下的nssm.exe復制到E盤(復制到哪里沒強制要求,方便就行)
3 電腦左下角搜索框中搜索cmd,右鍵以管理員身份運行:
4 進入剛才復制的nssm文件夾中,運行命令注冊服務:
E: nssm install DDNS_client <這個名稱你可以自己定義>
然后會彈出來一個界面:
Application Path:要注冊為服務的程序的路徑
Startup directory:要注冊為服務的程序所在的文件夾
Arguments:啟動參數
填寫如圖:
填完后直接點Install service就好了。
5 查看系統服務/配置自啟動
win+R運行 services.msc,打開系統服務。
找到我們剛才注冊的服務,如圖,修改為自動啟動,然后點啟動:
這樣這個python程序就在后台運行了。如果我們要刪除服務,那么將第四步的操作改為:
nssm remove <服務名稱>