在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上的文章:
其余: