【问题标题】:Relative Path in launchd plist启动 plist 中的相对路径
【发布时间】:2017-02-02 20:36:19
【问题描述】:

我目前正在使用 plist 来运行 shell 脚本。

 <?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.name.set</string>
                <key>Program</key>
                <string>/Users/username_here/Desktop/simple.sh</string>
                <key>RunAtLoad</key>
                <true/>
                <key>StartInterval</key>
                <integer>5</integer>
                <key>StandardErrorPath</key>
                <string>/tmp/com.name.example.stderr</string>
                <key>StandardOutPath</key>
                <string>/tmp/com.name.example.stdout</string>
        </dict>
        </plist>

这行得通!但是当我将程序名称更改为

<string>/Desktop/simple.sh</string>

它不运行脚本。 ~/Desktop/simple.sh 也不起作用。

有没有办法在不知道用户名和使用绝对路径的情况下运行脚本?

我在 tail launchd 时也收到此错误消息。

com.apple.xpc.launchd[1] (com.name.example[8178]): Service could not initialize: 14F27: xpcproxy + 13421 [1402][AD0301C4-D364-31CE-8BA7-B5DBECE64D0A]: 0x2

谢谢!

【问题讨论】:

    标签: path plist launchd


    【解决方案1】:

    使用 shell 作为 arg0 并给它一个相对于用户主文件夹的路径对我有用:

    <key>ProgramArguments</key>
    <array>
        <string>zsh</string>
        <string>-c</string>
        <string>~/CLI/scripts/list_open_jira_tickets --skip=5297 &gt; ~/CLI/tmp/open_jira_tickets.txt</string>
    </array>
    

    【讨论】:

      【解决方案2】:

      如果守护程序作为每个用户的代理运行(安装在 ~/Library/LaunchAgent 中),您可以使用句点获取相对路径。哪个是主文件夹 (~/)

      所以你可以这样做:

      <key>Program</key>
      <string>./Desktop/simple.sh</string>
      

      将程序保存在 plist 旁边可能会更好:

      ./Library/LaunchAgents/simple.sh
      

      【讨论】:

      • . 在这种情况下转换为/,而不是~
      • 你试过了吗?我的 cron 工作就是这样工作的。如果您的脚本是 USER 代理(因此位于主文件夹的库中),launchd 的当前工作目录就是主文件夹。
      • 我确实在 macOS 10.12 (Sierra) 上我的用户的 LaunchAgents 目录上尝试过,它转换为 /
      • 将脚本保存在 plist 旁边似乎是个坏主意。 Those directories are scanned at startup,所以你不一定想要不属于的东西。
      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2011-09-29
      • 2011-10-27
      • 2011-06-15
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多