Browse Source
Conflicts: functions/fn_details_distro functions/fn_getopt functions/fn_install_ts3 functions/fn_monitor_query functions/fn_update_checkpull/520/head
19 changed files with 1027 additions and 195 deletions
@ -1,164 +1,25 @@ |
|||||
language: bash |
language: bash |
||||
|
sudo: false |
||||
|
env: |
||||
|
- DISTRO=ubuntu-trusty |
||||
|
|
||||
before_script: |
before_script: |
||||
- curl -L "https://shunit2.googlecode.com/files/shunit2-2.1.6.tgz" | tar zx |
- curl -L "https://shunit2.googlecode.com/files/shunit2-2.1.6.tgz" | tar zx |
||||
|
|
||||
|
addons: |
||||
|
apt: |
||||
|
sources: |
||||
|
- ubuntu-toolchain-r-test |
||||
|
packages: |
||||
|
- tmux |
||||
|
- mailutils |
||||
|
- postfix |
||||
|
- lib32gcc1 |
||||
|
- libstdc++6 |
||||
|
- libstdc++6:i386 |
||||
|
- telnet |
||||
|
- expect |
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/7DaysToDie/serverfiles |
|
||||
- touch /home/travis/build/dgibbs64/linuxgsm/7DaysToDie/serverfiles/serverconfig.xml |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/CounterStrike/serverfiles/ |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/CounterStrike/serverfiles/cstrike |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/CounterStrikeGlobalOffensive/serverfiles/ |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/CounterStrikeGlobalOffensive/serverfiles/csgo |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/CounterStrikeGlobalOffensive/serverfiles/csgo/cfg |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/JustCause2/serverfiles/ |
|
||||
- touch /home/travis/build/dgibbs64/linuxgsm/JustCause2/serverfiles/default_config.lua |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/KillingFloor/serverfiles |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/KillingFloor/serverfiles/System |
|
||||
- touch /home/travis/build/dgibbs64/linuxgsm/KillingFloor/serverfiles/System/Default.ini |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/ProjectZomboid/Zomboid |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/ProjectZomboid/Zomboid/Server |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/ProjectZomboid/serverfiles |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/ProjectZomboid/serverfiles/projectzomboid |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/SeriousSam3BFE/serverfiles |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/SeriousSam3BFE/serverfiles/Content/ |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/SeriousSam3BFE/serverfiles/Content/SeriousSam3 |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/SeriousSam3BFE/serverfiles/Content/SeriousSam3/Config |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/SeriousSam3BFE/serverfiles/Bin |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/UnrealTournament2004/serverfiles |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/UnrealTournament2004/serverfiles/System |
|
||||
- touch /home/travis/build/dgibbs64/linuxgsm/UnrealTournament2004/serverfiles/System/ut2k4-server.ini |
|
||||
|
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/UnrealTournament99/serverfiles |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/UnrealTournament99/serverfiles/System |
|
||||
- touch /home/travis/build/dgibbs64/linuxgsm/UnrealTournament99/serverfiles/System/ut99-server.ini |
|
||||
- mkdir /home/travis/build/dgibbs64/linuxgsm/TeamSpeak3/serverfiles |
|
||||
script: |
script: |
||||
|
|
||||
- bash 7DaysToDie/sdtdserver auto-install |
- bash tests/test.sh |
||||
- bash 7DaysToDie/sdtdserver start |
|
||||
- bash 7DaysToDie/sdtdserver stop |
|
||||
- bash 7DaysToDie/sdtdserver restart |
|
||||
- bash 7DaysToDie/sdtdserver validate |
|
||||
- bash 7DaysToDie/sdtdserver monitor |
|
||||
- bash 7DaysToDie/sdtdserver email-test |
|
||||
- bash 7DaysToDie/sdtdserver details |
|
||||
|
|
||||
- bash Arma3/arma3server auto-install |
|
||||
- bash Arma3/arma3server start |
|
||||
- bash Arma3/arma3server stop |
|
||||
- bash Arma3/arma3server restart |
|
||||
- bash Arma3/arma3server validate |
|
||||
- bash Arma3/arma3server monitor |
|
||||
- bash Arma3/arma3server email-test |
|
||||
- bash Arma3/arma3server details |
|
||||
|
|
||||
- bash CounterStrike/csserver auto-install |
|
||||
- bash CounterStrike/csserver start |
|
||||
- bash CounterStrike/csserver stop |
|
||||
- bash CounterStrike/csserver restart |
|
||||
- bash CounterStrike/csserver validate |
|
||||
- bash CounterStrike/csserver monitor |
|
||||
- bash CounterStrike/csserver email-test |
|
||||
- bash CounterStrike/csserver details |
|
||||
|
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver auto-install |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver start |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver stop |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver restart |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver validate |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver monitor |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver email-test |
|
||||
- bash CounterStrikeGlobalOffensive/csgoserver details |
|
||||
|
|
||||
- bash JustCause2/jc2server auto-install |
|
||||
- bash JustCause2/jc2server start |
|
||||
- bash JustCause2/jc2server stop |
|
||||
- bash JustCause2/jc2server restart |
|
||||
- bash JustCause2/jc2server validate |
|
||||
- bash JustCause2/jc2server monitor |
|
||||
- bash JustCause2/jc2server email-test |
|
||||
- bash JustCause2/jc2server details |
|
||||
|
|
||||
- bash KillingFloor/kfserver auto-install |
|
||||
- bash KillingFloor/kfserver start |
|
||||
- bash KillingFloor/kfserver stop |
|
||||
- bash KillingFloor/kfserver restart |
|
||||
- bash KillingFloor/kfserver validate |
|
||||
- bash KillingFloor/kfserver monitor |
|
||||
- bash KillingFloor/kfserver email-test |
|
||||
- bash KillingFloor/kfserver details |
|
||||
|
|
||||
- bash NaturalSelection2/ns2server auto-install |
|
||||
- bash NaturalSelection2/ns2server start |
|
||||
- bash NaturalSelection2/ns2server stop |
|
||||
- bash NaturalSelection2/ns2server restart |
|
||||
- bash NaturalSelection2/ns2server validate |
|
||||
- bash NaturalSelection2/ns2server monitor |
|
||||
- bash NaturalSelection2/ns2server email-test |
|
||||
- bash NaturalSelection2/ns2server details |
|
||||
|
|
||||
- bash ProjectZomboid/pzserver auto-install |
|
||||
- bash ProjectZomboid/pzserver start |
|
||||
- bash ProjectZomboid/pzserver stop |
|
||||
- bash ProjectZomboid/pzserver restart |
|
||||
- bash ProjectZomboid/pzserver validate |
|
||||
- bash ProjectZomboid/pzserver monitor |
|
||||
- bash ProjectZomboid/pzserver email-test |
|
||||
- bash ProjectZomboid/pzserver details |
|
||||
|
|
||||
- bash SeriousSam3BFE/ss3sserver auto-install |
|
||||
- bash SeriousSam3BFE/ss3sserver start |
|
||||
- bash SeriousSam3BFE/ss3sserver stop |
|
||||
- bash SeriousSam3BFE/ss3sserver restart |
|
||||
- bash SeriousSam3BFE/ss3sserver validate |
|
||||
- bash SeriousSam3BFE/ss3sserver monitor |
|
||||
- bash SeriousSam3BFE/ss3sserver email-test |
|
||||
- bash SeriousSam3BFE/ss3sserver details |
|
||||
|
|
||||
- bash StarBound/sbserver auto-install |
|
||||
- bash StarBound/sbserver start |
|
||||
- bash StarBound/sbserver stop |
|
||||
- bash StarBound/sbserver restart |
|
||||
- bash StarBound/sbserver validate |
|
||||
- bash StarBound/sbserver monitor |
|
||||
- bash StarBound/sbserver email-test |
|
||||
- bash StarBound/sbserver details |
|
||||
|
|
||||
- bash Terraria/terrariaserver auto-install |
|
||||
- bash Terraria/terrariaserver start |
|
||||
- bash Terraria/terrariaserver stop |
|
||||
- bash Terraria/terrariaserver restart |
|
||||
- bash Terraria/terrariaserver validate |
|
||||
- bash Terraria/terrariaserver monitor |
|
||||
- bash Terraria/terrariaserver email-test |
|
||||
- bash Terraria/terrariaserver details |
|
||||
|
|
||||
- bash UnrealTournament2004/ut2k4server start |
|
||||
- bash UnrealTournament2004/ut2k4server stop |
|
||||
- bash UnrealTournament2004/ut2k4server restart |
|
||||
- bash UnrealTournament2004/ut2k4server monitor |
|
||||
- bash UnrealTournament2004/ut2k4server email-test |
|
||||
- bash UnrealTournament2004/ut2k4server details |
|
||||
|
|
||||
- bash UnrealTournament99/ut99server start |
|
||||
- bash UnrealTournament99/ut99server stop |
|
||||
- bash UnrealTournament99/ut99server restart |
|
||||
- bash UnrealTournament99/ut99server monitor |
|
||||
- bash UnrealTournament99/ut99server email-test |
|
||||
- bash UnrealTournament99/ut99server details |
|
||||
|
|
||||
- bash TeamSpeak3/ts3server start |
|
||||
- bash TeamSpeak3/ts3server stop |
|
||||
- bash TeamSpeak3/ts3server restart |
|
||||
- bash TeamSpeak3/ts3server update |
|
||||
- bash TeamSpeak3/ts3server monitor |
|
||||
- bash TeamSpeak3/ts3server email-test |
|
||||
- bash TeamSpeak3/ts3server details |
|
@ -0,0 +1,484 @@ |
|||||
|
#!/bin/bash |
||||
|
# Just Cause 2 |
||||
|
# Server Management Script |
||||
|
# Author: Daniel Gibbs |
||||
|
# Website: http://gameservermanagers.com |
||||
|
version="150715" |
||||
|
|
||||
|
#### Variables #### |
||||
|
|
||||
|
# Notification Email |
||||
|
# (on|off) |
||||
|
emailnotification="on" |
||||
|
email="[email protected]" |
||||
|
|
||||
|
# Steam login |
||||
|
steamuser="anonymous" |
||||
|
steampass="" |
||||
|
|
||||
|
# Start Variables |
||||
|
updateonstart="off" |
||||
|
|
||||
|
fn_parms(){ |
||||
|
parms="" |
||||
|
} |
||||
|
|
||||
|
#### Advanced Variables #### |
||||
|
|
||||
|
# Steam |
||||
|
appid="261140" |
||||
|
|
||||
|
# Server Details |
||||
|
servicename="jc2-server" |
||||
|
gamename="Just Cause 2" |
||||
|
engine="avalanche" |
||||
|
|
||||
|
# Directories |
||||
|
rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/jc2server" |
||||
|
selfname="$(basename $0)" |
||||
|
lockselfname=".${servicename}.lock" |
||||
|
filesdir="${rootdir}/serverfiles" |
||||
|
systemdir="${filesdir}" |
||||
|
executabledir="${filesdir}" |
||||
|
executable="./Jcmp-Server" |
||||
|
servercfg="config.lua" |
||||
|
servercfgdir="${filesdir}" |
||||
|
servercfgfullpath="${servercfgdir}/${servercfg}" |
||||
|
servercfgdefault="${servercfgdir}/default_config.lua" |
||||
|
backupdir="${rootdir}/backups" |
||||
|
|
||||
|
# Logging |
||||
|
logdays="7" |
||||
|
#gamelogdir="" # No server logs available |
||||
|
scriptlogdir="${rootdir}/log/script" |
||||
|
consolelogdir="${rootdir}/log/console" |
||||
|
|
||||
|
scriptlog="${scriptlogdir}/${servicename}-script.log" |
||||
|
consolelog="${consolelogdir}/${servicename}-console.log" |
||||
|
emaillog="${scriptlogdir}/${servicename}-email.log" |
||||
|
|
||||
|
scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log" |
||||
|
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log" |
||||
|
|
||||
|
##### Script ##### |
||||
|
# Do not edit |
||||
|
|
||||
|
fn_runfunction(){ |
||||
|
# Functions are downloaded and run with this function |
||||
|
if [ ! -f "${rootdir}/functions/${functionfile}" ]; then |
||||
|
cd "${rootdir}" |
||||
|
if [ ! -d "functions" ]; then |
||||
|
mkdir functions |
||||
|
fi |
||||
|
cd functions |
||||
|
echo -e " loading ${functionfile}...\c" |
||||
|
wget -N /dev/null https://raw.githubusercontent.com/dgibbs64/linuxgsm/master/functions/${functionfile} 2>&1 | grep -F HTTP | cut -c45- |
||||
|
chmod +x "${functionfile}" |
||||
|
cd "${rootdir}" |
||||
|
fi |
||||
|
source "${rootdir}/functions/${functionfile}" |
||||
|
} |
||||
|
|
||||
|
fn_functions(){ |
||||
|
# Functions are defined in fn_functions. |
||||
|
functionfile="${FUNCNAME}" |
||||
|
fn_runfunction |
||||
|
} |
||||
|
|
||||
|
fn_functions |
||||
|
|
||||
|
getopt=$1 |
||||
|
|
||||
|
fn_currentstatus(){ |
||||
|
pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:") |
||||
|
if [ "${pid}" == "0" ]; then |
||||
|
currentstatus="OFFLINE" |
||||
|
else |
||||
|
currentstatus="ONLINE" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
fn_setstatus(){ |
||||
|
fn_currentstatus |
||||
|
|
||||
|
echo"" |
||||
|
echo "Required status: ${requiredstatus}" |
||||
|
counter=0 |
||||
|
while [ "${requiredstatus}" != "${currentstatus}" ]; do |
||||
|
counter=$((counter+1)) |
||||
|
fn_currentstatus |
||||
|
|
||||
|
echo -ne "Current status: ${currentstatus}\\r" |
||||
|
if [ "${requiredstatus}" == "ONLINE" ]; then |
||||
|
(fn_start > /dev/null 2>&1) |
||||
|
else |
||||
|
(fn_stop > /dev/null 2>&1) |
||||
|
fi |
||||
|
if [ "${counter}" -gt "5" ]; then |
||||
|
currentstatus="FAIL" |
||||
|
echo "Current status: ${currentstatus}" |
||||
|
echo "" |
||||
|
echo "Unable to start or stop server." |
||||
|
exit |
||||
|
fi |
||||
|
done |
||||
|
echo -ne "Current status: ${currentstatus}\\r" |
||||
|
echo -e "\n" |
||||
|
echo "Test starting:" |
||||
|
echo "" |
||||
|
sleep 0.5 |
||||
|
} |
||||
|
|
||||
|
echo "=================================" |
||||
|
echo "TravisCI Tests" |
||||
|
echo "Linux Game Server Manager" |
||||
|
echo "by Daniel Gibbs" |
||||
|
echo "http://gameservermanagers.com" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
||||
|
echo "=================================" |
||||
|
echo "Generic Server Tests" |
||||
|
echo "Using: ${gamename}" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
||||
|
mkdir ${rootfdir} |
||||
|
|
||||
|
|
||||
|
echo "1.0 - start - no files" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "Test script reaction to missing server files." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
(fn_start) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "2.0 - install" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "install ${gamename} server." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_autoinstall |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "3.1 - start" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "start ${gamename} server." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_start |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.2 - start - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "start ${gamename} server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
(fn_start) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.3 - start - updateonstart" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "will update server on start." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
( |
||||
|
updateonstart="on" |
||||
|
fn_start |
||||
|
) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.4 - stop" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "stop ${gamename} server." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_stop |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.5 - stop - offline" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "stop ${gamename} server while already stopped." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
(fn_stop) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.6 - restart" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "restart ${gamename}." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_restart |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.7 - restart - offline" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "restart ${gamename} while already stopped." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_restart |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "4.1 - update" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "check for updates." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.2 - update - change buildid" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "change the buildid tricking SteamCMD to update." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "changed buildid to 0." |
||||
|
sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.3 - update - change buildid - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "change the buildid tricking SteamCMD to update server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "changed buildid to 0." |
||||
|
sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.4 - update - remove appmanifest file" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "removing appmanifest file will cause script to repair." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "removed appmanifest_${appid}.acf." |
||||
|
rm --verbose "${filesdir}/steamapps/appmanifest_${appid}.acf" |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.5 - force-update" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "force-update bypassing update check." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.6 - force-update - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "force-update bypassing update check server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.7 - validate" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "validate server files." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_validate |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.8 - validate - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "validate server files while server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_validate |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "5.1 - monitor - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "run monitor server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "5.2 - monitor - offline - no lockfile" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "run monitor while server is offline with no lockfile." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "5.3 - monitor - offline - with lockfile" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "run monitor while server is offline with no lockfile." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "creating lockfile." |
||||
|
date > "${rootdir}/${lockselfname}" |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "5.4 - monitor - gsquery.py failure" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "gsquery.py will fail to query port." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
sed -i 's/[0-9]\+/0/' "${servercfgfullpath}" |
||||
|
fn_monitor |
||||
|
echo "" |
||||
|
fn_printinfonl "Reseting ${servercfg}." |
||||
|
fn_install_config |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "6.0 - details" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "gsquery.py will fail to query port." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_details |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
echo "=================================" |
||||
|
echo "Generic Server Tests - Complete!" |
||||
|
echo "Using: ${gamename}" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
||||
|
fn_printinfo "Tidying up directories." |
||||
|
sleep 1 |
||||
|
rm -rfv ${rootdir} |
||||
|
echo "END" |
||||
|
|
||||
|
#!/bin/bash |
||||
|
# Teamspeak 3 |
||||
|
# Server Management Script |
||||
|
# Author: Daniel Gibbs |
||||
|
# Website: http://gameservermanagers.com |
||||
|
version="040715" |
||||
|
|
||||
|
#### Variables #### |
||||
|
|
||||
|
# Notification Email |
||||
|
# (on|off) |
||||
|
emailnotification="on" |
||||
|
email="[email protected]" |
||||
|
|
||||
|
# Start Variables |
||||
|
updateonstart="off" |
||||
|
|
||||
|
# Server Details |
||||
|
gamename="Teamspeak 3" |
||||
|
servername="Teamspeak 3 Server" |
||||
|
servicename="ts3-server" |
||||
|
|
||||
|
# Directories |
||||
|
rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ts3server" |
||||
|
selfname="$(basename $0)" |
||||
|
lockselfname=".${servicename}.lock" |
||||
|
filesdir="${rootdir}/serverfiles" |
||||
|
systemdir="${filesdir}" |
||||
|
executabledir="${filesdir}" |
||||
|
executable="./ts3server_startscript.sh" |
||||
|
servercfg="${servicename}.ini" |
||||
|
servercfgdir="${filesdir}" |
||||
|
servercfgfullpath="${servercfgdir}/${servercfg}" |
||||
|
backupdir="${rootdir}/backups" |
||||
|
|
||||
|
# Logging |
||||
|
logdays="7" |
||||
|
gamelogdir="${filesdir}/logs" |
||||
|
scriptlogdir="${rootdir}/log/script" |
||||
|
|
||||
|
scriptlog="${scriptlogdir}/${servicename}-script.log" |
||||
|
emaillog="${scriptlogdir}/${servicename}-email.log" |
||||
|
|
||||
|
scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log" |
||||
|
|
||||
|
|
||||
|
echo "=================================" |
||||
|
echo "Generic Server Tests" |
||||
|
echo "Using: ${gamename}" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
@ -0,0 +1,484 @@ |
|||||
|
#!/bin/bash |
||||
|
# Just Cause 2 |
||||
|
# Server Management Script |
||||
|
# Author: Daniel Gibbs |
||||
|
# Website: http://gameservermanagers.com |
||||
|
version="150715" |
||||
|
|
||||
|
#### Variables #### |
||||
|
|
||||
|
# Notification Email |
||||
|
# (on|off) |
||||
|
emailnotification="on" |
||||
|
email="[email protected]" |
||||
|
|
||||
|
# Steam login |
||||
|
steamuser="anonymous" |
||||
|
steampass="" |
||||
|
|
||||
|
# Start Variables |
||||
|
updateonstart="off" |
||||
|
|
||||
|
fn_parms(){ |
||||
|
parms="" |
||||
|
} |
||||
|
|
||||
|
#### Advanced Variables #### |
||||
|
|
||||
|
# Steam |
||||
|
appid="261140" |
||||
|
|
||||
|
# Server Details |
||||
|
servicename="jc2-server" |
||||
|
gamename="Just Cause 2" |
||||
|
engine="avalanche" |
||||
|
|
||||
|
# Directories |
||||
|
rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/jc2server" |
||||
|
mkdir "${rootdir}" |
||||
|
selfname="$(basename $0)" |
||||
|
lockselfname=".${servicename}.lock" |
||||
|
filesdir="${rootdir}/serverfiles" |
||||
|
systemdir="${filesdir}" |
||||
|
executabledir="${filesdir}" |
||||
|
executable="./Jcmp-Server" |
||||
|
servercfg="config.lua" |
||||
|
servercfgdir="${filesdir}" |
||||
|
servercfgfullpath="${servercfgdir}/${servercfg}" |
||||
|
servercfgdefault="${servercfgdir}/default_config.lua" |
||||
|
backupdir="${rootdir}/backups" |
||||
|
|
||||
|
# Logging |
||||
|
logdays="7" |
||||
|
#gamelogdir="" # No server logs available |
||||
|
scriptlogdir="${rootdir}/log/script" |
||||
|
consolelogdir="${rootdir}/log/console" |
||||
|
|
||||
|
scriptlog="${scriptlogdir}/${servicename}-script.log" |
||||
|
consolelog="${consolelogdir}/${servicename}-console.log" |
||||
|
emaillog="${scriptlogdir}/${servicename}-email.log" |
||||
|
|
||||
|
scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log" |
||||
|
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log" |
||||
|
|
||||
|
##### Script ##### |
||||
|
# Do not edit |
||||
|
|
||||
|
fn_runfunction(){ |
||||
|
# Functions are downloaded and run with this function |
||||
|
if [ ! -f "${rootdir}/functions/${functionfile}" ]; then |
||||
|
cd "${rootdir}" |
||||
|
if [ ! -d "functions" ]; then |
||||
|
mkdir functions |
||||
|
fi |
||||
|
cd functions |
||||
|
echo -e " loading ${functionfile}...\c" |
||||
|
wget -N /dev/null https://raw.githubusercontent.com/dgibbs64/linuxgsm/master/functions/${functionfile} 2>&1 | grep -F HTTP | cut -c45- |
||||
|
chmod +x "${functionfile}" |
||||
|
cd "${rootdir}" |
||||
|
fi |
||||
|
source "${rootdir}/functions/${functionfile}" |
||||
|
} |
||||
|
|
||||
|
fn_functions(){ |
||||
|
# Functions are defined in fn_functions. |
||||
|
functionfile="${FUNCNAME}" |
||||
|
fn_runfunction |
||||
|
} |
||||
|
|
||||
|
fn_functions |
||||
|
|
||||
|
getopt=$1 |
||||
|
|
||||
|
fn_currentstatus(){ |
||||
|
pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:") |
||||
|
if [ "${pid}" == "0" ]; then |
||||
|
currentstatus="OFFLINE" |
||||
|
else |
||||
|
currentstatus="ONLINE" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
fn_setstatus(){ |
||||
|
fn_currentstatus |
||||
|
|
||||
|
echo"" |
||||
|
echo "Required status: ${requiredstatus}" |
||||
|
counter=0 |
||||
|
while [ "${requiredstatus}" != "${currentstatus}" ]; do |
||||
|
counter=$((counter+1)) |
||||
|
fn_currentstatus |
||||
|
|
||||
|
echo -ne "Current status: ${currentstatus}\\r" |
||||
|
if [ "${requiredstatus}" == "ONLINE" ]; then |
||||
|
(fn_start > /dev/null 2>&1) |
||||
|
else |
||||
|
(fn_stop > /dev/null 2>&1) |
||||
|
fi |
||||
|
if [ "${counter}" -gt "5" ]; then |
||||
|
currentstatus="FAIL" |
||||
|
echo "Current status: ${currentstatus}" |
||||
|
echo "" |
||||
|
echo "Unable to start or stop server." |
||||
|
exit |
||||
|
fi |
||||
|
done |
||||
|
echo -ne "Current status: ${currentstatus}\\r" |
||||
|
echo -e "\n" |
||||
|
echo "Test starting:" |
||||
|
echo "" |
||||
|
sleep 0.5 |
||||
|
} |
||||
|
|
||||
|
echo "=================================" |
||||
|
echo "TravisCI Tests" |
||||
|
echo "Linux Game Server Manager" |
||||
|
echo "by Daniel Gibbs" |
||||
|
echo "http://gameservermanagers.com" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
||||
|
echo "=================================" |
||||
|
echo "Generic Server Tests" |
||||
|
echo "Using: ${gamename}" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
||||
|
|
||||
|
|
||||
|
echo "1.0 - start - no files" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "Test script reaction to missing server files." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
(fn_start) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "2.0 - install" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "install ${gamename} server." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_autoinstall |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "3.1 - start" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "start ${gamename} server." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_start |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.2 - start - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "start ${gamename} server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
(fn_start) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.3 - start - updateonstart" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "will update server on start." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
( |
||||
|
updateonstart="on" |
||||
|
fn_start |
||||
|
) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.4 - stop" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "stop ${gamename} server." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_stop |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.5 - stop - offline" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "stop ${gamename} server while already stopped." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
(fn_stop) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.6 - restart" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "restart ${gamename}." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_restart |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "3.7 - restart - offline" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "restart ${gamename} while already stopped." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_restart |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "4.1 - update" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "check for updates." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.2 - update - change buildid" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "change the buildid tricking SteamCMD to update." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "changed buildid to 0." |
||||
|
sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.3 - update - change buildid - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "change the buildid tricking SteamCMD to update server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "changed buildid to 0." |
||||
|
sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.4 - update - remove appmanifest file" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "removing appmanifest file will cause script to repair." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "removed appmanifest_${appid}.acf." |
||||
|
rm --verbose "${filesdir}/steamapps/appmanifest_${appid}.acf" |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.5 - force-update" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "force-update bypassing update check." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.6 - force-update - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "force-update bypassing update check server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_update_check |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.7 - validate" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "validate server files." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_validate |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "4.8 - validate - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "validate server files while server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_validate |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "5.1 - monitor - online" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "run monitor server while already running." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "5.2 - monitor - offline - no lockfile" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "run monitor while server is offline with no lockfile." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "5.3 - monitor - offline - with lockfile" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "run monitor while server is offline with no lockfile." |
||||
|
requiredstatus="OFFLINE" |
||||
|
fn_setstatus |
||||
|
fn_printinfonl "creating lockfile." |
||||
|
date > "${rootdir}/${lockselfname}" |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
echo "5.4 - monitor - gsquery.py failure" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "gsquery.py will fail to query port." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
sed -i 's/[0-9]\+/0/' "${servercfgfullpath}" |
||||
|
(fn_monitor) |
||||
|
echo "" |
||||
|
fn_printinfonl "Reseting ${servercfg}." |
||||
|
fn_install_config |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
|
||||
|
|
||||
|
echo "6.0 - details" |
||||
|
echo "=================================" |
||||
|
echo "Description:" |
||||
|
echo "gsquery.py will fail to query port." |
||||
|
requiredstatus="ONLINE" |
||||
|
fn_setstatus |
||||
|
fn_details |
||||
|
echo "" |
||||
|
echo "Test complete!" |
||||
|
sleep 1 |
||||
|
echo "" |
||||
|
|
||||
|
echo "=================================" |
||||
|
echo "Generic Server Tests - Complete!" |
||||
|
echo "Using: ${gamename}" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
||||
|
fn_printinfo "Tidying up directories." |
||||
|
sleep 1 |
||||
|
rm -rfv ${rootdir} |
||||
|
echo "END" |
||||
|
|
||||
|
#!/bin/bash |
||||
|
# Teamspeak 3 |
||||
|
# Server Management Script |
||||
|
# Author: Daniel Gibbs |
||||
|
# Website: http://gameservermanagers.com |
||||
|
version="040715" |
||||
|
|
||||
|
#### Variables #### |
||||
|
|
||||
|
# Notification Email |
||||
|
# (on|off) |
||||
|
emailnotification="on" |
||||
|
email="[email protected]" |
||||
|
|
||||
|
# Start Variables |
||||
|
updateonstart="off" |
||||
|
|
||||
|
# Server Details |
||||
|
gamename="Teamspeak 3" |
||||
|
servername="Teamspeak 3 Server" |
||||
|
servicename="ts3-server" |
||||
|
|
||||
|
# Directories |
||||
|
rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ts3server" |
||||
|
selfname="$(basename $0)" |
||||
|
lockselfname=".${servicename}.lock" |
||||
|
filesdir="${rootdir}/serverfiles" |
||||
|
systemdir="${filesdir}" |
||||
|
executabledir="${filesdir}" |
||||
|
executable="./ts3server_startscript.sh" |
||||
|
servercfg="${servicename}.ini" |
||||
|
servercfgdir="${filesdir}" |
||||
|
servercfgfullpath="${servercfgdir}/${servercfg}" |
||||
|
backupdir="${rootdir}/backups" |
||||
|
|
||||
|
# Logging |
||||
|
logdays="7" |
||||
|
gamelogdir="${filesdir}/logs" |
||||
|
scriptlogdir="${rootdir}/log/script" |
||||
|
|
||||
|
scriptlog="${scriptlogdir}/${servicename}-script.log" |
||||
|
emaillog="${scriptlogdir}/${servicename}-email.log" |
||||
|
|
||||
|
scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log" |
||||
|
|
||||
|
|
||||
|
echo "=================================" |
||||
|
echo "Generic Server Tests" |
||||
|
echo "Using: ${gamename}" |
||||
|
echo "=================================" |
||||
|
echo "" |
||||
|
sleep 1 |
Loading…
Reference in new issue