• 创建一个sh脚本,sh脚本的内容是执行python程序的命令

cd到要存放sh脚本的路径,我创建了一个ssr.sh文件。比如我的脚本内容如下:

#!/bin/sh
nohup python /Users/mrl/software/ssr/shadowsocks/local.py -c /etc/shadowsocks.json

第一行指定了使用bash运行这个脚本,因为这个是shell脚本。第二行中第三部分是python脚本所在目录。

然后是为当前用户给这个sh脚本赋予执行权限

chmod u+x ssr.sh
  • 创建plist文件

cd到~/Library/LaunchAgents/下,创建一个plist文件,文件名随意,比如我的是com.myapp.ssr.plist
内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
        <key>Label</key>
                <string>com.myapp.ssr</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/mrl/workspace/scripts/sh/ssr.sh</string>
        </array>
        <key>RunAtLoad</key>
                 <true/>
        <key>KeepAlive</key>
                <false/>
</dict>
</plist>

其中,/Users/mrl/workspace/scripts/sh/ssr.sh就是启动ssr的脚本路径。
然后,就是让Launchctl加载这个启动项。命令如下

launchctl load com.myapp.ssr.plist

使用命令

plutil com.myapp.ssr.plist

可以检查这个plist文件的语法格式是否有误。

此时可以立即用 launchctl start com.myapp.ssr.plist来验证一下这个开机启动项有没有正确配置。

另外还有一个不错的launchctl管理工具可以试一下,功能比较多,比如它能指出某个存在问题的launchctl任务中错误的地方是哪里。
工具叫做launchcontrol,到soma-zone可以找到下载链接。

但是,除了创建sh脚本用以运行python程序,然后用launchctl开机运行sh脚本这种略显繁琐的方法来达到开机跑一个python程序的目的,应该还有更简单直接的方法,有人知道的话不妨分享一下。

更多关于launchctl的信息可参考:
mac使用launchctl定时运行程序
Mac创建定时任务