Plist未使用launchctl运行AppleScript


0

我正在尝试安排我的AppleScript以60秒的间隔运行,运行两个shell脚本,并且在60秒后输出两个文件(StandardErrorPath和StandardOutPath)时似乎正确设置了我的plist,但我没有看到结果我的shell脚本看起来就像我在脚本编辑器中运行脚本时那样。对我来说,这似乎意味着ProgramArguments部分没有加载我的AppleScript。谁能指出我正确的方向?我应该在AppleScript中添加某种类型的日志记录来记录我的plist中的错误文件吗?

AppleScript文件(Shell脚本在脚本编辑器和终端中正确运行):

do shell script "cd /Users/user/Desktop/Projects/node/webmasters-cli && /Users/user/.nvm/versions/node/v4.3.2/bin/node app.js DesktopUSA"
do shell script "cd /Users/user/Desktop/Projects/node/webmasters-cli && /Users/user/.nvm/versions/node/v4.3.2/bin/node app.js DesktopAll"

plist(位于/ Users / user / Library / LaunchAgents)

<?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.user.webmasters.daily.pull</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/user/Desktop/Projects/node/webmasters-cli/daily-api-call.scpt</string>
    </array>
    <key>StartInterval</key>
    <integer>60</integer>
    <key>StandardErrorPath</key>
    <string>/tmp/webmastersDailyTest.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/webmastersDailyTest.out</string>
</dict>
</plist>

加载到launchctl的步骤:

1)改为目录

2)跑了 launchctl load com.user.webmasters.daily.pull.plist

3)检查 launchctl list。 plist出现了。

4)检查 /tmp 并且在60秒后创建StandardErrorPath和StandardOutPath文件。文件中没有预期的值。


为什么不直接从launchd运行shell脚本?
Mark

@Mark说实话我只是在学习mac上的自动调度,并且不太了解 launchd。你能安排shell脚本在特定频率上运行吗? (星期几,小时等)
cphill

是的,那就是launchd正在做的是运行一个程序,它可以是一个shell脚本 - 为了便于编写plist看看像Launch Control这样的工具
Mark

@Mark你可以在答案中建议我对plist的建议更改来运行shell脚本吗?
cphill

Answers:


1

尝试添加 /usr/bin/osascript 作为第一个 ProgramArguments。这将明确告诉 launchd 使用 osascript 运行你的脚本。

直接方法

您是否需要将AppleScript用于此启动的作业?如果没有,您可以通过直接调用来避免抽象级别 node

<key>WorkingDirectory</key>
<string>/Users/user/Desktop/Projects/node/webmasters-cli</string>
<key>ProgramArguments</key>
<array>
    <string>/Users/user/.nvm/versions/node/v4.3.2/bin/node</string>
    <string>app.js</string>
    <string>DesktopUSA</string>
</array>

谢谢你的回答。我不确定我是否需要,因为我只是在学习plist和launchd。总结一下我上面的shell脚本,我正在将目录更改为我的app.js文件所在的位置,然后指示节点存在的位置,并在带有参数的js文件上运行nodejs comman。您上面的答案看起来只包含命令的后半部分。是否有可能在plist中做两件事?
cphill

启动的作业只能执行一个进程。您可以修改launchd作业以直接调用shell脚本 - 然后可以将两个命令放在脚本中。如果这是为了工作,请考虑类似的事情 电源管理器 或其他第三方工具。
Graham Miln

1
上面的代码工作正常。我所做的只是加入 <string>/usr/bin/osascript</string> 而我的AppleScript就像一个魅力。谢谢!
cphill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.