選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (734 個字)

程式的面紗

sebastiaan-stam-XbZkCaminOY-unsplash-2

 曾經看過一位同事,因為比較熟悉網站應用程式,所以把他一個工具性質的需求也這麼奇妙地實作出來。感歎之餘,我私下認為,開發的時期只要辨別這兩種:

  • 打完收工
  • 痴痴地等

至於其他的變形,例如「打完收工」的什麼時候再自動跳出來打一下(排程)?要不要開機就自動打一下?打很久不耐煩了怎麼辦?「痴痴地等」有沒有休息的機會(服務)?這類的因素應該都不要在開發時列入考慮,外包處理就好。如果以上的思考很雜亂,來點有系統的:

  • 何人執行這程式?他/她有什麼權限,是否滿足程式的需求?
  • 何事驅動這程式(有時候上面那個「人」不是真正的人)?
  • 何時執行這程式?有需要時?開機時?還是依排程?
  • 何地執行這程式?工作目錄在哪?有哪些檔案是走相對路徑就取得到的?
  • 何物被這程式所需要(相依性)?

除了相依性是程式必須負起責任(檢查、錯誤處理)外,其他都可以,也應該外包給作業系統。看看有哪些實務上的做法(主要會提 Linux / CentOS 7):

  • 為程式建個帳號、群組是常見的做法,當然要由真人的帳號來執行也可以,但絕對不要再用 root 了。
  • 不論是「開機後自動執行」或是「排程」,都可以放在 crontab 裡。開機的時候是 @reboot,定期是寫出月、日、時、分還有星期幾。
  • 程式執行時有些參數,可能是固定的,也可能是傳進來的,或環境變數等,在 Windows 我們常說「用個批次檔包起來」,在 Linux 則是用 Shell Script,還要賦予執行權限(rwx 的 x)。
  • 程式要變身為服務(注意,我們不是一開始就說「要開發一個服務」,而是「將一個程式部署為一個服務」),在 Windows 可以用 sc.exe 或是 NSSM,在 Linux 麻煩一點,要為此寫個十幾二十行的 /etc/systemd/system/xxx.service 服務定義檔。
  • 雖然應該「痴痴地等」,但我們人沒那麼多時間,希望「打了就跑」,等我有空再回來關心一下的,可以用 nohup <command> &,有空回來看一看 nohup.out 有沒有問題。
  • 面對「打很久才會收工」的,為了不要我們人一離開就罷工,或者是 SSH 網路斷了就罷工,可以用 Screen 或是 tmux,雖然功能差不多,但授權(GPL / BSD)的差異讓我比較偏好後者。依常用的流程為例:
    • tmux new -s my-session 開始一個 session 並命名
    • 執行程式
    • Ctrl-b d 暫時離開
    • tmux ls 有空回來,看到 my-session 還在
    • tmux attach-session -t my-session 叫回我的程式
    • Ctrl-b x 關閉 session

看過以上的解構,大家未來在開發時,會不會想要避免把面紗縫在程式的臉上呢?

實用小工具分享 - SqlDumper
每日小知識#10 - container 資安

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/06/09, 週一

Captcha 圖像