0%

MacOS-Launchd

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
2
3
launchctl unload /Library/LaunchDaemons/bugscan.plist

launchctl unload ~/Library/LaunchAgents/com.synology.SynologyDrive.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/