osx startupitems shell脚本不启动应用程序

时间:2015-10-05 21:14:02

标签: macos startup wakanda

我正在尝试使用OSX 10.10.4上使用shell脚本的相关项目启动一个匿名服务器应用程序。

shell脚本已设置为可执行文件。

在启动时,没有任何操作可以启动Wakanda \ Server.app/Contents/MacOS/Wakanda \ Server。

请帮我完成这项工作。

shell脚本位于:

Macintosh HD:Library:StartupItems:DispatchStartup:DispatchStartup.sh

此shell脚本的内容是:

#!/bin/sh
. /etc/rc.common

# The start subroutine
StartService() {
    # Insert your start command below.  For example:
    /Applications/Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server --solution=/Applications/Dispatch/Dispatch\ Solution/Dispatch.waSolution
    # End example.
}

# The stop subroutine
StopService() {
    # Insert your stop command(s) below.  For example:
    killall -TERM /Applications/Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server
    sleep 15
    killall -9 /Applications/Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server
    # End example.
}

# The restart subroutine
RestartService() {
    # Insert your start command below.  For example:
    killall -HUP /Applications/Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server
    # End example.
}

RunService "$1"

// --------------------------------------------- ----------------------

shell脚本旁边的

//是StartParameters.plist // ------------------------------------------------ --------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
    <dict>
        <key>Description</key>
        <string>Wakanda Server</string>
        <key>OrderPreference</key>

        <string>Late</string>
        <key>Provides</key>
        <array>
                <string>Web service to database and objects</string>
        </array>
        <key>Uses</key>
        <array>
                <string>Network</string>
        </array>
    </dict>
</plist>

1 个答案:

答案 0 :(得分:1)

自OS X v10.4以来,已经弃用了启动项以支持launch daemons,并且它们似乎最终在v10.10中被完全禁用。更好的选择是......创建一个启动守护进程。它将是/ Library / LaunchDaemons /中的属性列表(.plist)文件,其中包含有关启动内容和启动时间的说明。

这会比平时稍微复杂一点,因为启动系统喜欢跟踪它启动的工作,这要求他们落入后台,并且我没有看到任何阻止Wakanda服务器自我背景的事情。您可以通过向.plist添加指令来解决此问题,以使其保持活动状态,并放弃&#34;放弃&#34;它的进程组(即不会杀掉它产生的任何剩余的后台进程)。 可能也是一个问题,因为没有好的方法告诉它等到网络启动。但是,如果它试图侦听特定的IP地址或接口,这通常是一个问题;如果它只是监听0.0.0.0(即计算机上的所有IP),这不是一个问题,因为它只会在接口出现时接收接口。

我认为.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>
        <false/>
        <key>Label</key>
        <string>local.wakanda-server</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Applications/Wakanda Server.app/Contents/MacOS/Wakanda Server</string>
                <string>--solution=/Applications/Dispatch/Dispatch Solution/Dispatch.waSolution</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
        <key>AbandonProcessGroup</key>
        <false/>
</dict>
</plist>

将其放在/Library/LaunchDaemons/local.wakanda-server.plist中,将所有权设置为root:wheel,将权限设置为644,然后重新启动或使用sudo launchctl load /Library/LaunchDaemons/local.wakanda-server.plist手动加载。