在Mac启动上运行python脚本

时间:2014-03-12 16:58:25

标签: python macos boot launchd

我试图让python脚本在启动时运行。我有以下文件:com.test.service.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.test.service</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/var/www/html/app/appstart.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

复制到〜/ Library / LaunchAgents /

加载为

launchctl load -w ~/Library/LaunchAgents/com.test.service.plist

脚本有两行:

/usr/bin/python /var/www/html/app/app.py
echo "hello" >> /var/www/html/app/test.txt

脚本运行(文件test.txt使用&#39; hello&#39;创建) 但是,app.py无法运行。出于测试目的,我在app.py内做的就是:

import os
os.system("echo 'python' >> /var/www/html/app/test.txt")

如果我只是在终端运行appstart.sh,那么python运行没问题

我已经按照this question中的说明,但没有运气

2 个答案:

答案 0 :(得分:1)

确保.plist文件是chmod 644。

你要求“在Mac启动时运行”和“在启动时运行”,它告诉我你在错误的目录中。 LaunchAgents用于在用户登录时运行脚本。 要在启动时运行,.plist文件需要位于/ Library / LaunchDaemons中并由root:wheel拥有。

如果您不需要shell来启动shell脚本来启动python,那么我建议使用一个快捷方式:

<add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/> 

答案 1 :(得分:1)

前段时间我用cron做到了这一点。你可以像这样输入

@reboot /path/to/my/script

more info about cron

我的脚本的路径将是appstart.sh文件的路径。

所以你打开你的终端。

您输入crontab -e(这将在您的默认编辑器中打开一个文件,可能是nano)

向下滚动并在您键入@reboot /path/to/file

的文件底部

然后保存并退出。