mirror of
https://github.com/eliasstepanik/ark-ac-server-tools.git
synced 2026-01-24 07:28:27 +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"
|
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
|
# Main program
|
||||||
#---------------------
|
#---------------------
|
||||||
@ -1493,6 +1535,8 @@ checkConfig
|
|||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
options=( )
|
options=( )
|
||||||
|
allinstances=no
|
||||||
|
instances=( )
|
||||||
args=( )
|
args=( )
|
||||||
command="$1"
|
command="$1"
|
||||||
shift
|
shift
|
||||||
@ -1519,6 +1563,12 @@ while true; do
|
|||||||
--*)
|
--*)
|
||||||
options+=( "$1" )
|
options+=( "$1" )
|
||||||
;;
|
;;
|
||||||
|
@all)
|
||||||
|
allinstances=yes
|
||||||
|
;;
|
||||||
|
@*)
|
||||||
|
instances+=( "${1#@}" )
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
if [ $nrarg -gt 0 ]; then
|
if [ $nrarg -gt 0 ]; then
|
||||||
args+=( "$1" )
|
args+=( "$1" )
|
||||||
@ -1531,75 +1581,19 @@ while true; do
|
|||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# handle non-instance separately
|
||||||
case "$command" in
|
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)
|
upgrade-tools)
|
||||||
doUpgradeTools
|
doUpgradeTools
|
||||||
|
exit
|
||||||
;;
|
;;
|
||||||
uninstall-tools)
|
uninstall-tools)
|
||||||
doUninstallTools
|
doUninstallTools
|
||||||
|
exit
|
||||||
;;
|
;;
|
||||||
useconfig)
|
useconfig)
|
||||||
useConfig "${args[0]}"
|
defaultinstance="${args[0]}"
|
||||||
|
continue
|
||||||
;;
|
;;
|
||||||
--version)
|
--version)
|
||||||
echo "Version: ${arkstVersion}"
|
echo "Version: ${arkstVersion}"
|
||||||
@ -1610,58 +1604,115 @@ while true; do
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
echo -e "Usage: arkmanager [OPTION]\n"
|
showUsage
|
||||||
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"
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
*)
|
"")
|
||||||
echo -n "arkmanager v${arkstVersion}: "
|
echo "arkmanager v${arkstVersion}: no command specified"
|
||||||
if [ $# -eq 0 ]; then
|
showUsage
|
||||||
echo "no command specified"
|
|
||||||
else
|
|
||||||
echo "unknown command '$1' specified"
|
|
||||||
fi
|
|
||||||
echo "Try 'arkmanager -h' or 'arkmanager --help' for more information."
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
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
|
if [ $# -eq 0 ]; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user