📜  如何让 bash 命令定期运行 - Shell-Bash 代码示例

📅  最后修改于: 2022-03-11 14:50:20.986000             🧑  作者: Mango

代码示例1
I wanted a way to execute a piece of the script every hour within the bash 
script file that runs on crontab every 5 minutes without having to use sleep 
or rely fully on crontab. if the TIME_INTERVAL is not met, the script will fail at 
the first condition. If the TIME_INTERVAL is met, however the TIME_CONDITION is not 
met,the script will fail at second condition. The below script does work hand-in-hand 
with crontab - adjust according.

NOTE: touch -m "$0" - This will change modification timestamp of the bash script file. 
You will have to create a separate file for storing the last script run time, 
if you don't want to change the modification timestamp of the bash script file.

CURRENT_TIME=$(date "+%s")
LAST_SCRIPT_RUN_TIME=$(date -r "$0" "+%s")
TIME_INTERVAL='3600'
START_TIME=$(date -d '07:00:00' "+%s")
END_TIME=$(date -d '16:59:59' "+%s")
TIME_DIFFERENCE=$((${CURRENT_TIME} - ${LAST_SCRIPT_RUN_TIME}))
TIME_CONDITION=$((${START_TIME} <= ${CURRENT_TIME} && ${CURRENT_TIME} <= $END_TIME}))


if [[ "$TIME_DIFFERENCE" -le "$TIME_INTERVAL" ]];
    then
        >&2 echo "[ERROR] FAILED - script failed to run because of time conditions"
elif [[ "$TIME_CONDITION" = '0' ]];
    then
        >&2 echo "[ERROR] FAILED - script failed to run because of time conditions"
elif [[ "$TIME_CONDITION" = '1' ]];
    then
        >&2 touch -m "$0"
        >&2 echo "[INFO] RESULT - script ran successfully"
fi