2016年8月11日 星期四

在 macOS Sierra 使用 launchd 定時執行程式

昨天完成了換領免費電子書程式,下一步是設立時間表去執行。我在 macOS Sierra 中使用 launchd 方法。做法很簡單,在 ~/Library/LaunchAgents 建立 com.pacess.cronjob.plist 檔案。內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.pacess.cronjob</string>

   <key>Program</key>
   <string>/Users/pacess/cronjob.sh</string>

   <key>StartCalendarInterval</key>
   <dict>
      <key>Hour</key>
      <integer>12</integer>
      <key>Minute</key>
      <integer>00</integer>
   </dict>

   <key>StandardOutPath</key>
   <string>/Users/pacess/cronjob.log</string>
</dict>
</plist>

以上內容是通知 macOS Sierra 在每天的中午 12:00 執行 /Users/pacess/cronjob.sh 檔案。應用程式名稱為 com.pacess.cronjob,並將輸出的內容儲存到 /Users/pacess/cronjob.log。

要不是指定時間的話,可以是指定間距,如兩小時。可以這樣做:
   <key>StartInterval</key>
   <integer>7200</integer>

利用以下指令載入及卸下 Plist 內容。如果沒有做這個動作,Plist 也會在下次登入時自動執行:
  • launchctl load ~/Library/LaunchAgents/com.pacess.cronjob.plist
  • launchctl unload ~/Library/LaunchAgents/com.pacess.cronjob.plist
     
    至於 bash 程序內容如下:
    #!/bin/bash
    now=$(date +"%D %T")
    echo "$now - Start cronjob.sh"
    
    export PATH=/usr/local/bin:$PATH
    /usr/local/bin/casperjs ~/cronjob.js
    
    now=$(date +"%D %T")
    echo "$now - End cronjob.sh"
  • 沒有留言: