为什么我无法在登录时运行我的启动脚本?


1

我正在使用OS X Yosemite。我正在尝试在登录时运行sh脚本,但我遇到了问题。我在/ Library / LaunchAgents目录中创建了以下文件...

-rwxr-xr-x  1 root  wheel  604 Oct 19 09:24 eXist.plist

该文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>eXist</string>
        <key>Program</key>
        <string>/Applications/eXist-db/bin/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>root</string>
        <key>StandardErorPath</key>
        <String>/tmp/eXistDB.err</string>
        <key>StandardOutputPath</key>
        <string>/tmp/eXistDB.out</string>
    </dict>
</plist>

但是,什么都没有运行(至少没有生成输出文件),我无法弄清楚为什么。我已经验证了存在的路径。如何在登录时运行我的脚本?

编辑:

为了证明路径存在,这里是在脚本中尝试路径时的输出与建议的...

Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db/bin/startup.sh 
/Applications/eXist-db/bin/startup.sh
Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
ls: /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh: No such file or directory

我的/ Library / LaunchAgents /Library/LaunchAgents/ 要么 ~/Library/LaunchAgents/
klanomath

Answers:


1

你在plist中犯了一些错误:

  • 如果安装了eXist-db 2.2,则/Applications/eXist-db/bin/startup.sh可能不存在

    有效路径是/Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh

  • StandardErorPath和StandardOutputPath不是有效密钥

    有效密钥是 StandardErrorPath StandardOutPath

  • 可能是根&lt; - &gt;已经解决的启动问题由patrix解决

  • plist不必是可执行的

要在用户登录后启动应用,只需将其添加到系统偏好设置 - &gt;用户&amp;群组 - &gt;您的用户 - &gt;登录项目


要在登录用户后在启动时和jetty启动eXist-db 2.0,您必须执行以下操作:

如果您还没有这样做,请先输入:

sudo /Applications/eXist-db/tools/wrapper/bin/exist.sh install

在/ Library / LaunchDaemons /中安装LaunchDaemon org.tanukisoftware.wrapper.eXist-db.plist。如果要添加StandardErrorPath和StandardOutPath修改文件 sudo nano /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist

它应该看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.tanukisoftware.wrapper.eXist-db</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/eXist-db/tools/wrapper/bin/exist.sh</string>
        <string>launchdinternal</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stdout</string>
</dict>
</plist>

永久加载守护进程:

sudo launchctl load -w /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist 

现在在〜/ Library / LaunchDaemons / named中创建第二个文件 com.eXist.plist 与纳米。它应该看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.eXist</string>
    <key>Program</key>
    <string>/Applications/eXist-db/bin/startup.sh</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/com.eXist.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.eXist.stdout</string>
</dict>
</plist>

添加了StandardErrorPath和StandardOutPath。

永久加载代理:

launchctl load -w ~/Library/LaunchAgents/com.eXist.plist

完成。


不要忘记正确设置(或)JAVA_HOME变量。如果您使用较新的eXist-db版本(例如2.2),则必须至少将/ Contents / Resources /添加到plist中的exist.sh和startup.sh的路径中(请通过打开应用程序包来检查正确的路径。


提示:不要使用TextEdit修改plist:否则plist文件可能格式不正确。


如果我使用“登录项”路径,那么任何潜在的错误输出都会保存到哪里?我尝试了你的建议,但服务没有启动(我可以验证我可以在termianl中自己启动它)
Dave

@Dave您是否在dmg中安装了应用程序包 这里
klanomath

不 - 你指的是2.2安装,但我们的项目依赖于2.0安装(遗憾的是我们目前无法升级)。此外,我在我的问题中添加了一些输出,以证明我的.plist文件中列出的路径存在。
Dave

0

您无法以用户身份启动内容 root 来自你的个人 LaunchAgents 因为这会创建一个相当大的安全漏洞。应该有关于此的消息 /var/log/system.log

男人launchd.plist

用户名

此可选键指定用户运行作业。此密钥仅在launchd以root身份运行时适用。

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.