iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
2
Software Development

自動化測試開發的美麗與憂愁系列 第 10

關於開機自動啟動程式這檔事 ... (windows/ 樹莓派[Linux based OS])

有時在設計自動化工具時, 會需要讓工具在開機時自動啟動. 以下是筆者整理出的方式

Windows

複雜版 - 手動驗證時使用

  • 只在下一次開機時執行一次, 接下來的開機就不再執行
  1. 使用系統管理員權限打開 Regedit 程式
  2. HEKY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ RunOnce
  3. 新增字串值
  4. 在數值內輸入要執行的程式 (需要使用絕對路徑)
  5. 設定完成後, 下次開機時就會出現計算機
  • 每次開機都會執行
  1. 將上面的第二點的路徑修改成HEKY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Run , 其他不變
  2. 設定完成後, 每次重開機都會自動執行小算盤程式

簡單版 - 使用powershell 設定

  • RunOnce (只跑一次)
Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" -Name 'OpenCalc' -Value "c:\WINDOWS\system32\calc.exe"
  • Run 每次重開機都跑
Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name 'OpenCalc' -Value "c:\WINDOWS\system32\calc.exe"

聰明版 - 將需要執行的程式變成Windows服務

  1. 到NSSM 官網下載相對應的版本
  2. 建立Windows service
nssm.exe install "demoService" "C:\demo\demo.exe"
* demoService: service Name
* "C:\demo\demo.exe": 需要執行的檔案
  1. 建立成功
Service "DemoService" installed successfully!
  1. 啟動/ 停止自建的Service
  • 啟動自建的Service
nssm.exe start DemoService
  • 停止執行自建的Service
nssm.exe stop DemoService
  1. 刪除自建的服務
nssm.exe remove "DemoService"

除此之外, 也可以使用圖形介面 控制台\所有控制台項目\系統管理工具\ 服務 做相關設定.

參考資料:


Raspberry Pi [Linux based OS]
如果是使用樹莓派讓程式在開機自動執行, 筆者建議可以使用service的方式取代將指令放在rc.local的檔案裏頭會更好
PS: 如果是一般的Linux 也建議可以這麼做.

主要原因

如果放在rc.local中, 程式在背景執行時掛掉了, 就無法自動重啟及保留相關紀錄 ;; 反之, 使用service的方式, 是可以設定成掛掉後自動重啟及在/var/log 中保留服務在執行時的資訊

實作

  1. 先建立一個 up.service 檔案
[Unit]
Description=UP service
After=multi-user.target

[Service]
ExecStart=/bin/bash -u /usr/bin/.up &
WorkingDirectory=/usr/bin
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=up.service
  • 將你要執行的檔案放置ExecStart
  • Restart - 重開機的時機
  • Alias - 在命令下要執行的service 名稱
  1. 做好檔案後將這個up.service檔案放置到路徑/lib/systemd/system
  2. 啟用service, 使用以下指令
systemctl enable up.service
  1. 啟用後就可以在/etc/systemd/system 中看到up.service 的連結
  2. 使用systemctl status [your service name] 就可以查詢狀態
  3. 使用systemctl -a 列出全部的process後查找你設定的service
  4. 停止service
systemctl disable up.service

參考資料:


上一篇
流程圖自動產生工具 from 程式碼
下一篇
自動化的安全性檢測工具 - Linux 篇
系列文
自動化測試開發的美麗與憂愁30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言