Add minecraft restic hook
This commit is contained in:
		
							
								
								
									
										96
									
								
								roles/restic/files/hooks/minecraft.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								roles/restic/files/hooks/minecraft.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
SERVICE=minecraft.service
 | 
			
		||||
VAR_DIR=/opt/minecraft/var
 | 
			
		||||
WAIT=30
 | 
			
		||||
VERBOSE=${VERBOSE:-4}
 | 
			
		||||
 | 
			
		||||
error_exit() {
 | 
			
		||||
    printf "%s\n" "$1" >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stop_server() {
 | 
			
		||||
    local unit="${1:-$SERVICE}"
 | 
			
		||||
    local attempts="${2:-$WAIT}"
 | 
			
		||||
 | 
			
		||||
    if ! systemctl -q is-active "$unit"; then
 | 
			
		||||
        printf "%s is already stopped\n" "$unit"
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    systemctl -q stop "$unit"
 | 
			
		||||
 | 
			
		||||
    while systemctl -q is-active "$unit"; do
 | 
			
		||||
        printf "waiting for %s to stop ... (%s)\n" "$unit" "$attempts"
 | 
			
		||||
        ((attempts--))
 | 
			
		||||
        if ((attempts == 0)); then
 | 
			
		||||
            return 1
 | 
			
		||||
        fi
 | 
			
		||||
        sleep 1
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start_server() {
 | 
			
		||||
    local unit="${1:-$SERVICE}"
 | 
			
		||||
    local attempts="${2:-$WAIT}"
 | 
			
		||||
 | 
			
		||||
    if systemctl -q is-active "$unit"; then
 | 
			
		||||
        printf "%s is already started\n" "$unit"
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    systemctl -q start "$unit"
 | 
			
		||||
 | 
			
		||||
    while ! systemctl -q is-active "$unit"; do
 | 
			
		||||
        printf "waiting for %s to start ... (%d)\n" "$unit" "$attempts"
 | 
			
		||||
        ((attempts--))
 | 
			
		||||
        if ((attempts == 0)); then
 | 
			
		||||
            return 1
 | 
			
		||||
        fi
 | 
			
		||||
        sleep 1
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
open_files() {
 | 
			
		||||
    local dir=${1-$VAR_DIR}
 | 
			
		||||
    local attempts="${2:-$WAIT}"
 | 
			
		||||
 | 
			
		||||
    while (($(lsof +D "$dir" | wc -l) > 0)); do
 | 
			
		||||
        printf "waiting for open files ... (%d)\n" "$attempts"
 | 
			
		||||
        ((attempts--))
 | 
			
		||||
        if ((attempts == 0)); then
 | 
			
		||||
            return 1
 | 
			
		||||
        fi
 | 
			
		||||
        sleep 1
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
main() {
 | 
			
		||||
    if [ "$1" == "pre" ]; then
 | 
			
		||||
        printf "stopping %s\n" $SERVICE
 | 
			
		||||
        if ! stop_server $SERVICE; then
 | 
			
		||||
            error_exit "Failed to stop $SERVICE"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        printf "checking for open files\n"
 | 
			
		||||
        if ! open_files $VAR_DIR; then
 | 
			
		||||
            error_exit "Open files exist in $VAR_DIR"
 | 
			
		||||
        fi
 | 
			
		||||
    elif [ "$1" == "post" ]; then
 | 
			
		||||
        printf "starting %s\n" $SERVICE
 | 
			
		||||
        if ! start_server $SERVICE; then
 | 
			
		||||
            error_exit "Failed to start $SERVICE"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main "$@"
 | 
			
		||||
		Reference in New Issue
	
	Block a user