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

各種平台上的「定期排程」或「開機後自動執行」

pngegg

作者曾在程式的面紗一文中,約略提到 Linux 的 crontab 可以設定「定期排程」或「開機後自動執行」,但在其他作業系統呢?首先我們看比較多人使用的 Windows:

Start -> Windows Administrative Tools -> Task Scheduler -> Create Basic Task...

  • Name
  • Trigger: Daily / Weekly / Monthly / When the computer starts
  • Action: Start a program
    • Program/script 選擇要執行的程式在此
    • Add arguments 執行時的參數
    • Start in 在什麼目錄啟動程式

這樣就設好了,如果順利的話就會依排程自動執行,如果覺得有問題也可以回來這邊看歷史紀錄。看不到?被 disable 掉了?沒關係,在右邊應該可以找到一個「Enable All Tasks History」。

比較意外地,這個問題在 Mac 上竟然是最不好處理的。雖然骨子裡也是 Linux,但有想法的蘋果要考驗我們一下:一般設了月/日/時/分/週的排程仍然可以用 crontab 簡單完成,但「開機後自動執行」卻是有點麻煩。沒關係,我們來化繁為簡:

  • 在 /Library/LaunchDaemon 目錄中找一個檔案來複製更名(或參考這篇),並修改內容。特別要注意以下幾點:
  • Label 是必要的,可以仿效其他的命名,例如 com.gss.blog
    • <key>Label</key>
    • <string>com.gss.blog</string>
  • 檔名是 Label 加附檔名 .plist,例如 com.gss.blog.plist
  • 程式名與參數請放在 ProgramArguments 陣列內,例如
    • <key>ProgramArguments</key>
    • <array>
      • <string>/path/to/myProgram</string>
      • <string>argument1</string>
      • <string>argument2</string>
    • </array>
  • 記得要「開機後自動執行」
    • <key>RunAtLoad</key>
    • <true/>

檔案完成了之後還要下指令 sudo launchctl load /Library/LaunchDaemon/com.gss.blog.plist 註冊使其生效,並且可以用 sudo launchctl list | blog 檢查。如果開機後沒有自動執行,要除錯的話,可以在 plist 增加這樣的內容:

  • <key>StandardErrorPath</key>
  • <string>/tmp/mycommand.err</string>
  • <key>StandardOutPath</key>
  • <string>/tmp/mycommand.out</string>

看到原因也改完 plist 後,要重新載入:

  • sudo launchctl unload /Library/LaunchDaemon/com.gss.blog.plist
  • sudo launchctl load /Library/LaunchDaemon/com.gss.blog.plist
測試工具 Recorder
簡單玩樹莓派-(2) Joomla for docker on RPI
 

評論

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

Captcha 圖像