IAP Storefront for Atavism MMO Engine

On macOS, you would use launchd instead of sc to create, load, and remove background services. Here’s how to replicate the service management process with a script that installs and removes services using launchd.

1. Create the launchd Service File

First, create the launchd configuration file (called a “plist” file) that will define your service. It will be located in /Library/LaunchDaemons/ for system-wide services or ~/Library/LaunchAgents/ for user-level services.

Here’s an example plist file:

<?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.hngunitystore.service</string>

    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/dotnet</string>
        <string>/opt/hngunitystore/HNGUnityStore.dll</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

    <key>KeepAlive</key>
    <true/>

    <key>StandardOutPath</key>
    <string>/var/log/hngunitystore.log</string>

    <key>StandardErrorPath</key>
    <string>/var/log/hngunitystore.error.log</string>
</dict>
</plist>

2. Script to Install the Service on macOS

You can create a shell script (install_service.sh) to automate the installation process:

#!/bin/bash

SERVICE_NAME="com.hngunitystore.service"
PLIST_PATH="/Library/LaunchDaemons/$SERVICE_NAME.plist"
SERVICE_DIR="/opt/hngunitystore"
DOTNET_PATH="/usr/local/bin/dotnet"
APP_PATH="$SERVICE_DIR/HNGUnityStore.dll"
LOG_PATH="/var/log/hngunitystore.log"

# Ensure the service directory exists
if [ ! -d "$SERVICE_DIR" ]; then
    echo "Error: Service directory $SERVICE_DIR does not exist."
    exit 1
fi

# Create the plist file
sudo tee $PLIST_PATH > /dev/null <<EOL
<?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>$SERVICE_NAME</string>

    <key>ProgramArguments</key>
    <array>
        <string>$DOTNET_PATH</string>
        <string>$APP_PATH</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

    <key>KeepAlive</key>
    <true/>

    <key>StandardOutPath</key>
    <string>$LOG_PATH</string>

    <key>StandardErrorPath</key>
    <string>/var/log/hngunitystore.error.log</string>
</dict>
</plist>
EOL

# Set proper permissions for the plist file
sudo chmod 644 $PLIST_PATH

# Load and start the service
sudo launchctl load $PLIST_PATH
sudo launchctl start $SERVICE_NAME

echo "Service $SERVICE_NAME installed and started."

3. Script to Remove the Service on macOS

You can create a shell script (remove_service.sh) to remove the service:

#!/bin/bash

SERVICE_NAME="com.hngunitystore.service"
PLIST_PATH="/Library/LaunchDaemons/$SERVICE_NAME.plist"

# Stop and unload the service
sudo launchctl stop $SERVICE_NAME
sudo launchctl unload $PLIST_PATH

# Remove the plist file
sudo rm -f $PLIST_PATH

echo "Service $SERVICE_NAME stopped and removed."

4. Usage Instructions

  1. Save the install_service.sh and remove_service.sh scripts.
  2. Make them executable:
    chmod +x install_service.sh
    chmod +x remove_service.sh
  3. Run the installation script:
    sudo ./install_service.sh
  4. To remove the service, run:
    sudo ./remove_service.sh

5. Explanation of the launchd Service

  • Label: The unique name of the service (com.hngunitystore.service).
  • ProgramArguments: The array containing the command to run the service (in this case, dotnet /opt/hngunitystore/HNGUnityStore.dll).
  • RunAtLoad: Ensures the service starts when loaded.
  • KeepAlive: Keeps the service running continuously.
  • StandardOutPath/StandardErrorPath: Redirects the output and error logs to specific files.

This script will install the HNGUnityStore service on macOS, ensuring it runs in the background and logs its output to /var/log/hngunitystore.log. You can then easily manage the service using launchctl.