Cygwin에서 매분마다 bash 스크립트를 실행하십시오.

Cygwin에서 매분마다 bash 스크립트를 실행하십시오.

다음 스크립트가 있는데 Windows 서버에서 1분마다 실행해야 합니다. 파일 경로는 d/TFTP/script.sh이므로 매분 백그라운드에서 실행되도록 while 루프 등을 삽입할 수 있는지 궁금합니다.

#!/bin/bash

declare -A arr_map

arr_map=([AR]=Switches [SW]=Switches [LR]=Switches [AP]=Default [GV]=Default [DR]=Default [GV]=Default [VN]=Default [MGMT]=Default [GW]=Routers)

# Iterate through indexes of array
for keyword in "${!arr_map[@]}"; do
    # Search files containing the "-$keyword" pattern in the name
    # like "-GW" or "-AR". This pattern can be tuned to the better matching.
    for filename in *-"$keyword"*; do
        # if file exists and it is regular file
        if [ -f "$filename" ]; then
            destination=${arr_map["$keyword"]}/"$filename"
            # Remove these echo commands, after checking resulting commands.
            echo mkdir -p "$destination"
            echo mv -f "$filename" "$destination"
            mkdir -p "$destination"
            mv -f "$filename" "$destination"
            #echo in front of mkidr and move
        fi
    done
done

답변1

각 질문에 대한 댓글 스레드:

#!/bin/bash
while [[ 1 -eq 1 ]]; do
    everything_in_the_original_script
    sleep 60
done

답변2

또는 각 반복에 총 60초가 걸리도록 하려면 이 Bash 스크립트는 코드의 시간을 측정하고 나머지 60초 동안만 절전 모드로 전환합니다(코드가 60초보다 오래 걸리면 전혀 수행하지 않습니다). 안 자고 있음)...

sleep_time=60

while true; do
    start_secs=$(date +'%s')
    everything_in_the_original_script
    end_secs=$(date +'%s')

    elapsed=$((end_secs - start_secs))
    [[ $elapsed -le $sleep_time ]] || elapsed=$sleep_time
    sleep $((sleep_time - elapsed))
done

관련 정보