sleepコマンドは毎時間実行されます。

sleepコマンドは毎時間実行されます。

あなたの助けが必要です。 crontabで予約できないスクリプトがあります。しかし、私はsleepコマンドを使用しています。

sleepコマンドの使用に問題があります。

私のスクリプトは実行時に完了するのに10〜15分かかり、sleep(3600)を使用します。つまり、もう一時間寝るということです。

しかし、私の要件は、私のスクリプトが9時、10時...などで始まるということです。私のスクリプトの実行時間は10分(異なる)で、sleep(3600)コマンドの後、私のスクリプトの次の実行は10時ではなく10時10分に始まります。

誰もがスクリプトを毎時間実行するように変更する方法を教えてもらえますか?

答え1

#!/bin/bash

function MY_CODE(){
    START_TIME_SECONDS=$(date +%s)
    <your code>
    END_TIME_SECONDS=$(date +%s)
    SCRIPT_RUN_TIME_IN_SECONDS=$((${END_TIME_SECONDS}-${START_TIME_SECONDS}))
    SLEEP_TIME=$((3600-${SCRIPT_RUN_TIME_IN_SECONDS}))
    sleep ${SLEEP_TIME}
}

MY_CODE()

答え2

目標は起動時間に基づいて実行をスケジュールすることであるため、次のように各スクリプトの実行をスケジュールできます。

#!bin/bash

function runattime {
    execution_time=$1
    delay=$(( $(date -d "$1" "+%s") - $(date "+%s") ))
    if [ $delay -le 0 ]; then
        echo "negative delay, probably due to incorrect date argument"
    else
        sleep $delay && ${@:2}
    fi
}


# One shot run
runattime 11:50 echo blah & 
runattime 11:51 echo bleh & 


# Everyday run
while true; do
    runattime 11:50 echo hola & 
    runattime 11:51 echo hello & 
    sleep 86400  # wait for next day and loop
done

接続が失われてもバックグラウンドでスクリプトを実行するには、bashでnohupコマンドを使用できます。

関連情報