在Mac上,執行定時任務,有兩種方式:html
launchctl
crontab
命令畢竟咱是在mac上開發,這裏只講launchctl
的用法python
下圖是個人一個很簡單的任務plist文件:linux
可使用plutil -lint
來驗證plist的格式是否正確(這只是表明plist格式正確,不表明裏面的命令是有效的)git
plist文件裏具體的key能夠參考:github
上圖使用的定時腳本爲test.sh
,如下爲文件內容:macos
#!/bin/sh say hello world
上面的腳本會讓電腦發聲「hello world」,記得打開電腦音量~windows
注意:bash
你須要將test.sh
置爲可執行文件,可用命令:chmod a+x test.sh
。
不然的話,腳本就根本不可能執行的。網上不少文章都沒強調這一點網絡
你也可使用ls -l
看看test.sh
是否可執行(擁有x權限),以下圖:app
建議放在 ~/Library/LaunchAgents 下面。
下面再來理解幾個基礎概念:
/System/Library和/Library和~/Library目錄的區別?
/System/Library
目錄是存放Apple本身開發的軟件。
/Library
目錄是系統管理員存放的第三方軟件。
~/Library/
是用戶本身存放的第三方軟件。
LaunchDaemons和LaunchAgents的區別?
LaunchDaemons
是用戶未登錄前就啓動的服務(守護進程)。
LaunchAgents
是用戶登錄後啓動的服務(守護進程)。
最常使用的命令:
launchctl load -w ***.plist
;-w
選項會將plist文件中無效的key覆蓋掉,建議加上launchctl unload -w ***.plist
launchctl list
;列表會顯示不少任務,建議過濾一下:launchctl list | grep '任務的部分名字'
launchctl
命令能夠參考:蘋果官方文檔:launchctl(1) Mac OS X Manual Page
我在用 launchctl 或者 crontab 遇到一樣的問題:
好比個人 launchctl 裏面加載了腳本test.sh
test.sh 腳本的內容:
#!/bin/bash svn status | xargs echo echo "out: 輸出正確的中文"
在使用在launchctl 定時執行test.sh
腳本的輸出:
svn st | xargs echo
: 這行輸出若是有中文,中文部分亂碼;
echo "out: 輸出正確的中文"
: 這行會輸出正確的中文
這裏面就是編碼的問題,以後我參考了下面的文章:
crontab,svn郵件,日誌亂碼解決方法(LINUX) :
前段時間一直爲linux下的SVN郵件通知亂碼而發愁,苦苦尋找了2個星期最終發現本身果真很白。。不知道是問題太簡單了仍是別的緣由,,一直沒有在網上找到解決的相關方法和資料(大部分都是windows下的配置,但是額D是linux哇)。下面是解決方法,但願對和我同樣鬱悶的人有幫助
以前有人說修改/etc/profile 加入環境量變,這個只能修改郵件自己的亂碼問題,不能修正log diff中的亂碼,亂碼的緣由是在svn調用post-commit的時候沒有定義變量形成的,svn和crontab是無視系統默認變量的(=。=!!)。須要在post-commit中加入
#!/bin/sh
LANG=en_US.UTF-8
export LANG
以後svn或者crontab在調用的時候就能夠正常輸出中文了 編碼能夠按本身的狀況進行修改~
按照裏面的說明,將test.h
腳本文件修改以下:
#!/bin/bash LANG=en_US.UTF-8 export LANG svn status | xargs echo echo "out: 輸出正確的中文"
設置了編碼以後,全部的輸出立馬就正常了。
感興趣的,想深刻研究的,建議看看文章
蘋果官方文檔:
alvinalexander.com上的文章:
其餘: