Bash script для запуска через 5 минут

Я просто хочу, чтобы bash script запускался через 5 минут после его вызова. Что я делаю неправильно?

У меня есть команда:

/path/to/my/script | at now + 5 min

И все же script запускается сразу каждый раз.

Ответы

Ответ 1

Вы выполняете script немедленно и отправляете свой вывод в at. Вам нужно отправить имя самого script в at:

echo /path/to/my/script | at now + 5 min

Ответ 2

как насчет:

sleep 300 && /path/to/my/script

Ответ 3

at -f /path/to/my/script -t now +5 minutes

Это должно работать до планирования script для запуска в определенное время. Для получения дополнительной информации о команде "at" попробуйте linuxmanpages.com. Я могу ошибаться (в настоящее время не тестировать систему Linux).

Удачи в любом случае

Ответ 4

Команды оцениваются слева направо, поэтому сначала выполняется ваш script, вывод которого будет передан в команду at, это нормальное поведение. Посмотрите на на man-страницах для получения дополнительной информации.

Ответ 5

Проблема заключается в том, что вы запускаете script и передаете вывод в команду at. Вам нужно выполнить команду at с указанием пути к вашему script в качестве параметра. Я не уверен в синтаксисе, но at -h или man at должен помочь.

Ответ 6

попробуйте это

sys.scheduled_run /path/to/my/script 5

Основная функция

function sys.scheduled_run(){
    local PATH_TO_ACTION MINS SLEEPTIME
    PATH_TO_ACTION=$1
    MINS=$2
    SLEEPTIME=$(($MINS * 60))
    echo "Sleeping for $MINS minute ($SLEEPTIME seconds) and then running $PATH_TO_ACTION"
    ui.countdown $SLEEPTIME
    $PATH_TO_ACTION
    echo "Done"
    if [ "REPEAT" == "$3" ] 
    then
        echo "Going for Repeat"
        sys.scheduled_run "[email protected]"
    fi
}

функция обратного отсчета

function ui.countdown(){ #USAGE ui.countdown 60 countdown for 60 seconds
        local SECONDS=$1
        local START=$(date +%s)
        local END=$((START + SECONDS))
        local CUR=$START
        while [[ $CUR -lt $END ]]
        do
                CUR=$(date +%s)
                LEFT=$((END-CUR))

                printf "\r%02d:%02d:%02d" \
                        $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done
        echo "        "
}