mirror of
https://github.com/eliasstepanik/ark-ac-server-tools.git
synced 2026-01-12 10:58:28 +00:00
Add per-command multi-instance support
This commit is contained in:
parent
6a6c1e7fa7
commit
7cd3d9e15f
267
tools/arkmanager
267
tools/arkmanager
@ -1484,6 +1484,48 @@ useConfig() {
|
||||
source "$1"
|
||||
}
|
||||
|
||||
showUsage() {
|
||||
echo -e "Usage: arkmanager [Commands]\n"
|
||||
echo "Commands can be followed by one or more @instance arguments"
|
||||
echo "The special '@all' instance selects all instances"
|
||||
echo "Commands may also be followed by zero or more --options"
|
||||
echo
|
||||
echo "Commands that take no instances:"
|
||||
echo "Command Description"
|
||||
echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed"
|
||||
echo "uninstall-tools Uninstall the ARK Server Tools"
|
||||
echo "useconfig <name> Sets the default instance for the commands that follow"
|
||||
echo "--help Show this help"
|
||||
echo "--version Show the version info of ARK Server Tools"
|
||||
echo
|
||||
echo "Commands that take one or more instances:"
|
||||
echo "Command Description"
|
||||
echo "backup Saves a backup of your server inside the backup directory"
|
||||
echo "broadcast <msg> Sends a message to all users connected to server"
|
||||
echo "saveworld Saves the game world to disk"
|
||||
echo "rconcmd <cmd> Execute RCON command on server"
|
||||
echo "checkupdate Check for a new ARK server version"
|
||||
echo "install Install the ARK server files from steamcmd"
|
||||
echo "installmod <modid> Installs a mod from the Steam workshop"
|
||||
echo "restart Stops the server and then starts it"
|
||||
echo "run Runs the server without daemonizing"
|
||||
echo "start Starts the server"
|
||||
echo "stop Stops the server"
|
||||
echo "status Returns the status of the current ARK server instance"
|
||||
echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again"
|
||||
echo
|
||||
echo "Update command takes the below options:"
|
||||
echo " --force Apply update without checking the current version"
|
||||
echo " --safe Wait for server to perform world save and update."
|
||||
echo " --warn Warn players before updating server"
|
||||
echo " --validate Validates all ARK server files"
|
||||
echo " --saveworld Saves world before update"
|
||||
echo " --update-mods Updates installed and requested mods"
|
||||
echo " --backup Takes a backup of the save files before updating"
|
||||
echo " --downloadonly Download the mod and/or server update without applying it"
|
||||
echo " Requires arkStagingDir be set to a staging directory on the same filesystem as the server"
|
||||
}
|
||||
|
||||
#---------------------
|
||||
# Main program
|
||||
#---------------------
|
||||
@ -1493,6 +1535,8 @@ checkConfig
|
||||
|
||||
while true; do
|
||||
options=( )
|
||||
allinstances=no
|
||||
instances=( )
|
||||
args=( )
|
||||
command="$1"
|
||||
shift
|
||||
@ -1519,6 +1563,12 @@ while true; do
|
||||
--*)
|
||||
options+=( "$1" )
|
||||
;;
|
||||
@all)
|
||||
allinstances=yes
|
||||
;;
|
||||
@*)
|
||||
instances+=( "${1#@}" )
|
||||
;;
|
||||
*)
|
||||
if [ $nrarg -gt 0 ]; then
|
||||
args+=( "$1" )
|
||||
@ -1531,75 +1581,19 @@ while true; do
|
||||
shift
|
||||
done
|
||||
|
||||
# handle non-instance separately
|
||||
case "$command" in
|
||||
run)
|
||||
doRun
|
||||
;;
|
||||
start)
|
||||
if [ " ${options[*]} " =~ " --all " ]; then
|
||||
doStartAll
|
||||
else
|
||||
doStart
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
if [ " ${options[*]} " =~ " --all " ]; then
|
||||
doStopAll
|
||||
else
|
||||
doStop stop "${options[@]}"
|
||||
fi
|
||||
;;
|
||||
restart)
|
||||
if [ " ${options[*]} " =~ " --all " ]; then
|
||||
doStopAll
|
||||
else
|
||||
doStop restart "${options[@]}"
|
||||
fi
|
||||
echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog"
|
||||
sleep 1
|
||||
if [ " ${options[*]} " =~ " --all " ]; then
|
||||
doStartAll
|
||||
else
|
||||
doStart
|
||||
fi
|
||||
echo "`timestamp`: start" >> "$logdir/$arkmanagerLog"
|
||||
echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog"
|
||||
;;
|
||||
install)
|
||||
doInstall
|
||||
;;
|
||||
update)
|
||||
doUpdate "${options[@]}"
|
||||
;;
|
||||
checkupdate)
|
||||
checkForUpdate
|
||||
;;
|
||||
installmod)
|
||||
doInstallMod "${args[@]}"
|
||||
;;
|
||||
backup)
|
||||
doBackup
|
||||
;;
|
||||
broadcast)
|
||||
doBroadcast "${args[@]}"
|
||||
;;
|
||||
saveworld)
|
||||
doSaveWorld
|
||||
;;
|
||||
rconcmd)
|
||||
rconcmd "${args[@]}"
|
||||
;;
|
||||
status)
|
||||
printStatus
|
||||
;;
|
||||
upgrade-tools)
|
||||
doUpgradeTools
|
||||
exit
|
||||
;;
|
||||
uninstall-tools)
|
||||
doUninstallTools
|
||||
exit
|
||||
;;
|
||||
useconfig)
|
||||
useConfig "${args[0]}"
|
||||
defaultinstance="${args[0]}"
|
||||
continue
|
||||
;;
|
||||
--version)
|
||||
echo "Version: ${arkstVersion}"
|
||||
@ -1610,58 +1604,115 @@ while true; do
|
||||
exit 1
|
||||
;;
|
||||
-h|--help)
|
||||
echo -e "Usage: arkmanager [OPTION]\n"
|
||||
echo "Option Description"
|
||||
echo "backup Saves a backup of your server inside the backup directory"
|
||||
echo "broadcast <msg> Sends a message to all users connected to server"
|
||||
echo "saveworld Saves the game world to disk"
|
||||
echo "rconcmd <cmd> Execute RCON command on server"
|
||||
echo "checkupdate Check for a new ARK server version"
|
||||
echo "install Install the ARK server files from steamcmd"
|
||||
echo "installmod <modid> Installs a mod from the Steam workshop"
|
||||
echo "restart Stops the server and then starts it"
|
||||
echo "restart --all Restarts all servers specified in configfile_xxxxx"
|
||||
echo "run Runs the server without daemonizing"
|
||||
echo "start Starts the server"
|
||||
echo "start --all Starts all servers specified in configfile_xxxxx"
|
||||
echo "stop Stops the server"
|
||||
echo "stop --all Stops all servers specified in configfile_xxxxx"
|
||||
echo "status Returns the status of the current ARK server instance"
|
||||
echo "update [OPTION ...] Check for a new ARK server version, if needed, stops the server, updates it, and starts it again"
|
||||
echo "upgrade-tools Check for a new ARK Server Tools version and upgrades it if needed"
|
||||
echo "uninstall-tools Uninstall the ARK Server Tools"
|
||||
echo "useconfig <name> Use the configuration overrides in the specified config name or file"
|
||||
echo "--help Show this help"
|
||||
echo "--version Show the version info of ARK Server Tools"
|
||||
echo
|
||||
echo "Update command takes the below options:"
|
||||
echo " --force Apply update without checking the current version"
|
||||
echo " --safe Wait for server to perform world save and update."
|
||||
echo " --warn Warn players before updating server"
|
||||
echo " --validate Validates all ARK server files"
|
||||
echo " --saveworld Saves world before update"
|
||||
echo " --update-mods Updates installed and requested mods"
|
||||
echo " --backup Takes a backup of the save files before updating"
|
||||
echo " --downloadonly Download the mod and/or server update without applying it"
|
||||
echo " Requires arkStagingDir be set to a staging directory on the same filesystem as the server"
|
||||
echo
|
||||
echo "stop and restart commands take the below options:"
|
||||
echo " --warn Warn players before shutting down the server"
|
||||
echo " --saveworld Saves world before shutdown"
|
||||
showUsage
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
echo -n "arkmanager v${arkstVersion}: "
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "no command specified"
|
||||
else
|
||||
echo "unknown command '$1' specified"
|
||||
fi
|
||||
echo "Try 'arkmanager -h' or 'arkmanager --help' for more information."
|
||||
"")
|
||||
echo "arkmanager v${arkstVersion}: no command specified"
|
||||
showUsage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
status=$?
|
||||
|
||||
# Handle no instances being specified
|
||||
if [[ "${#instances[@]}" == 0 && "$allinstances" == "no" ]]; then
|
||||
if [ -n "$defaultinstance" ]; then
|
||||
instances=( "$defaultinstance" )
|
||||
else
|
||||
echo "No instances supplied for command ${command} ${options[*]} ${args[*]}"
|
||||
read -p "Do you wish to run this command for all instances?" -n 1 -r
|
||||
echo
|
||||
if [[ "$REPLY" =~ ^[Yy]$ ]]; then
|
||||
allinstances=yes
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Handle all instances being requested
|
||||
if [[ "$allinstances" == "yes" ]]; then
|
||||
instances=( )
|
||||
for varname in "${!configfile_@}"; do
|
||||
instances+=( "${varname#configfile_}" )
|
||||
done
|
||||
fi
|
||||
|
||||
# Run the command for each instance requested
|
||||
for instance in "${instances[@]}"; do
|
||||
(
|
||||
echo "Running command '${command}' for instance '${instance}'"
|
||||
useConfig "$instance"
|
||||
|
||||
case "$command" in
|
||||
run)
|
||||
doRun
|
||||
;;
|
||||
start)
|
||||
doStart
|
||||
;;
|
||||
stop)
|
||||
doStop shutdown "${options[@]}"
|
||||
;;
|
||||
restart)
|
||||
doStop restart "${options[@]}"
|
||||
echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog"
|
||||
;;
|
||||
install)
|
||||
doInstall
|
||||
;;
|
||||
update)
|
||||
doUpdate "${options[@]}"
|
||||
;;
|
||||
checkupdate)
|
||||
checkForUpdate
|
||||
;;
|
||||
installmod)
|
||||
doInstallMod "${args[@]}"
|
||||
;;
|
||||
backup)
|
||||
doBackup
|
||||
;;
|
||||
broadcast)
|
||||
doBroadcast "${args[@]}"
|
||||
;;
|
||||
saveworld)
|
||||
doSaveWorld
|
||||
;;
|
||||
rconcmd)
|
||||
rconcmd "${args[@]}"
|
||||
;;
|
||||
status)
|
||||
printStatus
|
||||
;;
|
||||
*)
|
||||
echo -n "arkmanager v${arkstVersion}: unknown command '$command' specified"
|
||||
showUsage
|
||||
exit 255
|
||||
;;
|
||||
esac
|
||||
)
|
||||
laststatus=$?
|
||||
if [ $laststatus -eq 255 ]; then
|
||||
exit 1
|
||||
elif [ $laststatus -ne 0 ]; then
|
||||
status=$laststatus
|
||||
fi
|
||||
done
|
||||
|
||||
# Perform the restart portion of the restart command
|
||||
if [[ "$command" == "restart" ]]; then
|
||||
sleep 1
|
||||
for instance in "${instances[@]}"; do
|
||||
(
|
||||
useConfig "$instance"
|
||||
doStart
|
||||
echo "`timestamp`: start" >> "$logdir/$arkmanagerLog"
|
||||
echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog"
|
||||
)
|
||||
done
|
||||
fi
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user