Compare commits
	
		
			5 Commits
		
	
	
		
			55676661db
			...
			07a5dd96b2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						07a5dd96b2
	
				 | 
					
					
						|||
| 
						
						
							
						
						3349430416
	
				 | 
					
					
						|||
| 
						
						
							
						
						52d9dc0f57
	
				 | 
					
					
						|||
| 
						
						
							
						
						d86b692e4f
	
				 | 
					
					
						|||
| 
						
						
							
						
						55ba448f13
	
				 | 
					
					
						
@@ -1,2 +1,4 @@
 | 
			
		||||
---
 | 
			
		||||
rclone_package_url: https://downloads.rclone.org/v1.50.1/rclone-v1.50.1-linux-amd64.deb
 | 
			
		||||
rclone_arch: amd64
 | 
			
		||||
rclone_version: 1.50.2
 | 
			
		||||
rclone_package_url: "https://downloads.rclone.org/v{{ rclone_version }}/rclone-v{{ rclone_version }}-linux-{{ rclone_arch }}.deb"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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 "$@"
 | 
			
		||||
							
								
								
									
										15
									
								
								roles/restic/files/restic-job.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										15
									
								
								roles/restic/files/restic-job.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -20,6 +20,7 @@ fi
 | 
			
		||||
 | 
			
		||||
JOB_PATH="${RESTIC_ETC_PATH}/jobs/${JOB}"
 | 
			
		||||
JOB_ENV="${JOB_PATH}/env.sh"
 | 
			
		||||
HOOKS_PATH="${JOB_PATH}/hooks.d"
 | 
			
		||||
 | 
			
		||||
if [ ! -r "$JOB_ENV" ]; then
 | 
			
		||||
    error_exit "${JOB_ENV} does not exist"
 | 
			
		||||
@@ -48,6 +49,13 @@ if [ -z "${PATHS+x}" ]; then
 | 
			
		||||
    error_exit "\$PATHS is not set"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
printf "job '%s' started\n" "$JOB"
 | 
			
		||||
 | 
			
		||||
if [ -d "${HOOKS_PATH}" ]; then
 | 
			
		||||
    printf "running '%s' job pre-hooks\n" "$JOB"
 | 
			
		||||
    run-parts -v -a pre "${HOOKS_PATH}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
counter=0
 | 
			
		||||
sleep=1
 | 
			
		||||
rc=1
 | 
			
		||||
@@ -72,4 +80,11 @@ done
 | 
			
		||||
 | 
			
		||||
if [ $rc -ne 0 ] && [ $counter -eq "$MAX_ATTEMPTS" ]; then
 | 
			
		||||
  printf "restic job timed out, exiting\n"
 | 
			
		||||
else
 | 
			
		||||
    printf "job '%s' complete\n" "$JOB"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -d "${HOOKS_PATH}" ]; then
 | 
			
		||||
    printf "running '%s' job post-hooks\n" "$JOB"
 | 
			
		||||
    run-parts -v -a post "${HOOKS_PATH}"
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								roles/restic/files/restic-tidy.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										16
									
								
								roles/restic/files/restic-tidy.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -10,8 +10,10 @@ error_exit() {
 | 
			
		||||
RESTIC_ETC_PATH=${RESTIC_ETC_PATH:-/etc/restic}
 | 
			
		||||
RESTIC_PATH=${RESTIC_PATH:-/usr/local/bin/restic}
 | 
			
		||||
 | 
			
		||||
# initial sleep
 | 
			
		||||
MAX_ATTEMPTS=60
 | 
			
		||||
MAX_SLEEP=43200  # 12 hours
 | 
			
		||||
SLEEP="$(((RANDOM % MAX_SLEEP) + 1))s"
 | 
			
		||||
REPO=$1
 | 
			
		||||
 | 
			
		||||
if [ -z "$REPO" ]; then
 | 
			
		||||
@@ -34,8 +36,16 @@ KEEP_WEEKLY=${KEEP_WEEKLY:-5}
 | 
			
		||||
KEEP_MONTHLY=${KEEP_MONTHLY:-12}
 | 
			
		||||
KEEP_YEARLY=${KEEP_YEARLY:-10}
 | 
			
		||||
 | 
			
		||||
# initial sleep
 | 
			
		||||
sleep "$(((RANDOM % MAX_SLEEP) + 1))s"
 | 
			
		||||
printf "started, keep hourly:%d daily:%d weekly:%d monthly:%d year:%d\n" \
 | 
			
		||||
    "$KEEP_HOURLY" \
 | 
			
		||||
    "$KEEP_DAILY" \
 | 
			
		||||
    "$KEEP_WEEKLY" \
 | 
			
		||||
    "$KEEP_MONTHLY" \
 | 
			
		||||
    "$KEEP_YEARLY"
 | 
			
		||||
 | 
			
		||||
printf "sleeping for %s (initial)\n" $SLEEP
 | 
			
		||||
 | 
			
		||||
sleep $SLEEP
 | 
			
		||||
 | 
			
		||||
counter=0
 | 
			
		||||
sleep=1
 | 
			
		||||
@@ -65,4 +75,6 @@ done
 | 
			
		||||
 | 
			
		||||
if [ $rc -ne 0 ] && [ $counter -eq "$MAX_ATTEMPTS" ]; then
 | 
			
		||||
    printf "tidy timed out, exiting\n"
 | 
			
		||||
else
 | 
			
		||||
    printf "complete\n"
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,19 @@
 | 
			
		||||
    mode: 0755
 | 
			
		||||
    state: directory
 | 
			
		||||
 | 
			
		||||
- name: create repo environment helper
 | 
			
		||||
- name: create job hooks
 | 
			
		||||
  copy:
 | 
			
		||||
    src: "hooks/{{ hook_item }}"
 | 
			
		||||
    dest: "{{ restic_etc_path }}/jobs/{{ item.name }}/hooks.d/{{ hook_item | basename | splitext | first }}"
 | 
			
		||||
    owner: root
 | 
			
		||||
    group: root
 | 
			
		||||
    mode: 0755
 | 
			
		||||
  loop: "{{ item.hooks | default([]) }}"
 | 
			
		||||
  loop_control:
 | 
			
		||||
    loop_var: hook_item
 | 
			
		||||
  when: item.hooks is defined
 | 
			
		||||
 | 
			
		||||
- name: create job environment helper
 | 
			
		||||
  template:
 | 
			
		||||
    src: job-env.sh.j2
 | 
			
		||||
    dest: "{{ restic_etc_path }}/jobs/{{ item.name }}/env.sh"
 | 
			
		||||
@@ -15,6 +27,15 @@
 | 
			
		||||
    group: root
 | 
			
		||||
    mode: 0400
 | 
			
		||||
 | 
			
		||||
- name: install hooks
 | 
			
		||||
  file:
 | 
			
		||||
    path: "{{ restic_etc_path }}/jobs/{{ item.name }}/hooks.d"
 | 
			
		||||
    owner: root
 | 
			
		||||
    group: root
 | 
			
		||||
    mode: 0755
 | 
			
		||||
    state: directory
 | 
			
		||||
  when: item.hooks is defined and item.hooks | length
 | 
			
		||||
 | 
			
		||||
- name: create job exclude file
 | 
			
		||||
  template:
 | 
			
		||||
    src: exclude.txt.j2
 | 
			
		||||
@@ -33,4 +54,4 @@
 | 
			
		||||
    weekday: "{{ item.cron.weekday | default(omit) }}"
 | 
			
		||||
    user: "{{ item.cron.user | default('root') }}"
 | 
			
		||||
    state: "{{ item.cron.state | default('present') }}"
 | 
			
		||||
    job: "{{ restic_bin_path }}/restic-job {{ item.name }}"
 | 
			
		||||
    job: "( {{ restic_bin_path }}/restic-job {{ item.name }} | logger --id=$$ -t restic-job -p user.info ) 2>&1 | logger --id=$$ -t restic-job -p user.err"
 | 
			
		||||
 
 | 
			
		||||
@@ -60,4 +60,4 @@
 | 
			
		||||
    minute: "{{ 60 | random(seed=inventory_hostname) }}"
 | 
			
		||||
    user: root
 | 
			
		||||
    state: present
 | 
			
		||||
    job: "{{ restic_bin_path }}/restic-tidy {{ item.name }}"
 | 
			
		||||
    job: "( {{ restic_bin_path }}/restic-tidy {{ item.name }} | logger --id=$$ -t restic-tidy -p user.info ) 2>&1 | logger --id=$$ -t restic-tidy -p user.err"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user