-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautostart.sh
60 lines (46 loc) · 1.56 KB
/
autostart.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
# ======== #
# Config #
# ======== #
cd /home/minecraft/ # change working directory where the scripts are located
# don't execute script if backup is in progress (the -i argument ignores this)
[[ -f backup.lock && "$1" != "-i" ]] && exit 0
server_jar="fabric-server-launch.jar" # server jar to monitor
screen_name="minecraft" # name of the screen the server is running
dir="." # cd the screen session in this directory ("." if no change)
disable_joining=0 # EXPERIMENTAL: disable joining for <amount> seconds by renaming the whitelist (includes the time the server needs to start, 0 to disable this feature)
start_script="start.sh"
send_screen(){
screen -S $screen_name -p 0 -X stuff "$1^M"
}
# =========== #
# Autostart #
# =========== #
# cancel script if autostart.sh is already running
for pid in $(pidof -x autostart.sh); do
if [ $pid != $$ ]; then
exit 0
fi
done
# check if minecraft server is not running
if ! pgrep -a java | grep -q $server_jar; then
# check if screen session does not exists
if ! screen -list | grep -q $screen_name; then
# create screen
screen -dmS $screen_name
# wait for the screen session to get created?
sleep 2
# change directory
send_screen "cd $dir"
fi
# disable joining if feature is enabled
[ $disable_joining -gt 0 ] && mv -f whitelist.json whitelist.json.bak
# start server
send_screen "./$start_script"
# re-enable joining if feature is enabled
if [ $disable_joining -gt 0 ]; then
sleep $disable_joining
mv -f whitelist.json.bak whitelist.json
send_screen "whitelist reload"
fi
fi