]> git.rmz.io Git - dotfiles.git/blob - bin/minecraft_init
nvim: add FPP copyright snippet
[dotfiles.git] / bin / minecraft_init
1 #!/bin/bash
2 # /etc/init.d/minecraft
3 # version 0.3.2 2011-01-27 (YYYY-MM-DD)
4
5 ### BEGIN INIT INFO
6 # Provides: minecraft
7 # Required-Start: $local_fs $remote_fs
8 # Required-Stop: $local_fs $remote_fs
9 # Should-Start: $network
10 # Should-Stop: $network
11 # Default-Start: 2 3 4 5
12 # Default-Stop: 0 1 6
13 # Short-Description: Minecraft server
14 # Description: Starts the minecraft server
15 ### END INIT INFO
16
17 #Settings
18 SERVICE='minecraft_server.jar'
19 USERNAME="minecraft"
20 MCPATH='/home/minecraft/minecraft'
21 CPU_COUNT=2
22 INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar minecraft_server.jar nogui"
23 BACKUPPATH='/home/minecraft/minecraft/minecraft.backup'
24
25 ME=`whoami`
26 as_user() {
27 if [ $ME == $USERNAME ] ; then
28 bash -c "$1"
29 else
30 su - $USERNAME -c "$1"
31 fi
32 }
33
34 mc_start() {
35 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
36 then
37 echo "Tried to start but $SERVICE was already running!"
38 else
39 echo "$SERVICE was not running... starting."
40 cd $MCPATH
41 as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
42 sleep 7
43 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
44 then
45 echo "$SERVICE is now running."
46 else
47 echo "Could not start $SERVICE."
48 fi
49 fi
50 }
51
52 mc_saveoff() {
53 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
54 then
55 echo "$SERVICE is running... suspending saves"
56 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
57 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
58 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
59 sync
60 sleep 10
61 else
62 echo "$SERVICE was not running. Not suspending saves."
63 fi
64 }
65
66 mc_saveon() {
67 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
68 then
69 echo "$SERVICE is running... re-enabling saves"
70 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
71 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
72 else
73 echo "$SERVICE was not running. Not resuming saves."
74 fi
75 }
76
77 mc_stop() {
78 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
79 then
80 echo "$SERVICE is running... stopping."
81 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
82 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
83 sleep 10
84 as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
85 sleep 7
86 else
87 echo "$SERVICE was not running."
88 fi
89 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
90 then
91 echo "$SERVICE could not be shut down... still running."
92 else
93 echo "$SERVICE is shut down."
94 fi
95 }
96
97
98 mc_update() {
99 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
100 then
101 echo "$SERVICE is running! Will not start update."
102 else
103 # MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\</a\> | cut -d \" -f 2`
104 MC_SERVER_URL="https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?"
105 as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
106 if [ -f $MCPATH/minecraft_server.jar.update ]
107 then
108 if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
109 then
110 echo "You are already running the latest version of $SERVICE."
111 else
112 as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
113 echo "Minecraft successfully updated."
114 fi
115 else
116 echo "Minecraft update could not be downloaded."
117 fi
118 fi
119 }
120
121 mc_backup() {
122 echo "Backing up minecraft world"
123 if [ -d $BACKUPPATH/`date "+%Y.%m.%d"`_world ]
124 then
125 for i in 1 2 3 4 5 6
126 do
127 if [ -d $BACKUPPATH/`date "+%Y.%m.%d"`-${i}_world ]
128 then
129 continue
130 else
131 as_user "cd $MCPATH && cp -r world $BACKUPPATH/`date "+%Y.%m.%d"`-${i}_world"
132 break
133 fi
134 done
135 else
136 as_user "cd $MCPATH && cp -r world $BACKUPPATH/`date "+%Y.%m.%d"`_world"
137 echo "Backed up world"
138 fi
139 echo "Backing up the minecraft server executable"
140 if [ -f "$BACKUPPATH/`date "+%Y.%m.%d"`_minecraft_server.jar" ]
141 then
142 for i in 1 2 3 4 5 6
143 do
144 if [ -f "$BACKUPPATH/`date "+%Y.%m.%d"`-${i}_minecraft_server.jar" ]
145 then
146 continue
147 else
148 as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/`date "+%Y.%m.%d"`-${i}_minecraft_server.jar\""
149 break
150 fi
151 done
152 else
153 as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/`date "+%Y.%m.%d"`_minecraft_server.jar\""
154 fi
155 echo "Backup complete"
156 }
157
158
159 #Start-Stop here
160 case "$1" in
161 start)
162 mc_start
163 ;;
164 stop)
165 mc_stop
166 ;;
167 restart)
168 mc_stop
169 mc_start
170 ;;
171 update)
172 mc_stop
173 mc_backup
174 mc_update
175 mc_start
176 ;;
177 backup)
178 mc_saveoff
179 mc_backup
180 mc_saveon
181 ;;
182 status)
183 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
184 then
185 echo "$SERVICE is running."
186 else
187 echo "$SERVICE is not running."
188 fi
189 ;;
190
191 *)
192 echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart}"
193 exit 1
194 ;;
195 esac
196
197 exit 0