MacOS Launchd
传统的 UNIX 会使用 /etc/rc.*
或其他的机制来管理开机时要启动的启动服务,而现在的 OS X 则使用 launchd
来管理,它的启动服务称为 Launch Daemon/Agents, 利用 Launch Daemon/Agent,我们就可以令脚本程序在系统启动的时候在后台运行了。
Launch Daemon 和 Launch Agent区别
Launch Daemon 和 Launch Agent 是同一种东西在不同应用范围的名称。
Launch Daemon 是系统级别的服务,称为 daemon,在开机时会加载。
Launch Agent 是用户级别的服务,称为agent,在用户登录后才会加载。
两种方式设置脚本执行时间
- StartInterval: 它指定脚本每间隔多长时间(单位:秒)执行一次。
- StartCalendarInterval: 它可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置。
plist文件存放路径
- ~/Library/LaunchAgents
- /Library/LaunchAgents
plist文件配置参数
- Label (必须) 该项服务的名称(一般以plist文件名命名)
- Program 指定可执行文件的路径和名称, 如果没有 ProgramArguments 的话, Program 是必选的
- ProgramArguments (如果没指定 Program, 则必须指定)
- RunAtLoad (可选) 标识launchd在加载完该项服务之后立即启动路径指定的可执行文件。默认值为 false,设置为 true 即可实现开机运行脚本文件。
- StartCalendarInterval (可选) 该关键字可以用来设置定时执行可执行程序,可使用 Month, Day, Hour, Minute, Second等子关键字,它可以指定脚本在多少月,天,小时,分钟,秒,星期几等时间上执行,若缺少某个关键字则表示任意该时间点,类似于 Unix 的 Crontab 计划任务的设置方式。
所有key关键字详细使用说明可以在终端下使用命令
man launchd.plist
查询。
载入配置
1 | launchctl load /Library/LaunchDaemons/bugscan.plist |
卸载配置
1 | launchctl unload /Library/LaunchDaemons/bugscan.plist |
检查语法是否正确
1 | plutil /Library/LaunchDaemons/bugscan.plist |
查看服务运行状态
1 | launchctl list |
注意事项
- 要让任务生效,必须先load命令加载这个plist
- 如果任务文件修改了,那么必须先unload,然后重新load
- start可以测试任务,这个是立即执行,不管时间到了没有
- 执行start和unload前,任务必须先load过,否则报错
- stop可以停止任务
- ProgramArguments内不能直接写命令,只能通过shell脚本来执行
摘自:
http://blog.evalbug.com/2015/11/29/osx_plist_startup/
http://honglu.me/2014/09/20/OSX%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/