Скрипт bash для запуска за 5 минут
Я просто хочу, чтобы bash-скрипт запускался через 5 минут после его вызова. Что я делаю неправильно?
У меня есть команда:
/path/to/my/script | at now + 5 min
И все же сценарий запускается сразу каждый раз.
6 ответов
Вы немедленно выполняете скрипт и отправляете его вывод в at
, Вам нужно отправить имя самого скрипта в at
:
echo /path/to/my/script | at now + 5 min
at -f /path/to/my/script -t now +5 minutes
Это должно сработать, если запланировать запуск сценария в определенное время. Для получения дополнительной информации о " at
msgstr "команда try http://linuxmanpages.com/man1/at.1.php. Возможно, я ошибаюсь (в настоящее время нет системы linux для тестирования).
Удачи в любом случае
Проблема в том, что вы запускаете сценарий и передаете вывод в at
команда. Что вам нужно сделать, это запустить at
команда с путем к вашему сценарию в качестве параметра. Я не уверен в синтаксисе, но at -h
или же man at
должно помочь
Команды оцениваются слева направо, поэтому сначала выполняется ваш скрипт, его вывод будет передан в команду at, это нормальное поведение. Взгляните на справочные страницы для получения дополнительной информации.
Попробуй это
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 "$@"
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 " "
}