diff --git a/services/git-monitor b/services/git-monitor index 42a0a27..6d50270 100755 --- a/services/git-monitor +++ b/services/git-monitor @@ -6,6 +6,7 @@ REPO_LOCAL_PATH="/opt/src" BRANCH_NAME="develop" POLL_INTERVAL=60 # Seconds between checks #LOG_FILE="/var/log/git-monitor.log" # Log file for recording actions +LOCK_FILE="/run/lock/git-monitor.lock" # File to prevent multiple instances IFS="|" # Functions @@ -17,6 +18,21 @@ log_message() { echo "$timestamp [$level] $message" # Also print to console (optional) } +check_lock() { + if [ -f "$LOCK_FILE" ]; then + log_message "WARN" "Another instance is already running. Exiting." + exit 1 + fi +} + +create_lock() { + touch "$LOCK_FILE" +} + +remove_lock() { + rm -f "$LOCK_FILE" +} + run_after() { local after_pull_script=$1 source $after_pull_script @@ -68,6 +84,12 @@ check_for_updates() { } # Main Execution + +trap 'remove_lock' EXIT + +check_lock +create_lock + log_message "INFO" "Git monitor started." initialize_repos @@ -81,3 +103,5 @@ while true; do done < $REPO_URLS sleep "$POLL_INTERVAL" done + +remove_lock # This won't be reached in this infinite loop. Useful if exiting gracefully. diff --git a/units/git-monitor.service b/units/git-monitor.service index e85c666..2f15469 100644 --- a/units/git-monitor.service +++ b/units/git-monitor.service @@ -4,9 +4,7 @@ After=network.target [Service] ExecStart=/usr/local/bin/git-monitor -LockFile=/run/lock/git-monitor-lock Restart=on-failure -RemovalPolicy=onFailure User=monitor WorkingDirectory=/opt/src