1

OSX 10.10.4 でシェル スクリプトを使用して、関連付けられたプロジェクトで顔のないサーバー アプリケーションを起動しようとしています。

シェルスクリプトは実行可能に設定されています。

起動時に Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server を起動しても何も起こりません。

この作業を手伝ってください。

シェル スクリプトは次の場所にあります。

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

このシェル スクリプトの内容は次のとおりです。

#!/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"

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

// シェル スクリプトの次は 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>
4

1 に答える 1

1

OS X v10.4 以降、スタートアップ項目は廃止され、起動デーモンが優先され、最終的に v10.10 で完全に無効になったようです。より良いオプションは...代わりに起動デーモンを作成することです。これは、/Library/LaunchDaemons/ にあるプロパティ リスト (.plist) ファイルで、何をいつ起動するかについての指示が含まれています。

これは通常よりも少し複雑になります。なぜなら、launchd システムは起動したジョブを追跡するのが好きであり、そのためにジョブがバックグラウンドに落ちないようにする必要があり、Wakanda サーバーが自身をバックグラウンド化するのを妨げるものは見当たらないからです。これを回避するには、.plist を存続させずにそのプロセス グループを "放棄" するように命令を追加します (つまり、生成された残りのバックグラウンド プロセスを強制終了しないでください)。ネットワークが立ち上がるまで待つように指示する良い方法がないという問題もあるかもしれません。ただし、特定の 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ます。

于 2015-10-06T01:59:24.750 に答える