Я просто хочу, чтобы скрипт bash запускался через 5 минут после его вызова. Что я делаю не так?скрипт bash для запуска через 5 минут
У меня есть команда:
/path/to/my/script | at now + 5 min
И еще скрипт запускается сразу же каждый раз.
Я просто хочу, чтобы скрипт bash запускался через 5 минут после его вызова. Что я делаю не так?скрипт bash для запуска через 5 минут
У меня есть команда:
/path/to/my/script | at now + 5 min
И еще скрипт запускается сразу же каждый раз.
Вы сразу же выполнение сценария и отправки его выход в at
. Вам необходимо отправить имя самого сценария в at
:
echo /path/to/my/script | at now + 5 min
как насчет:
sleep 300 && /path/to/my/script
Да, это Цюй Эстине действительно не нужно 'at'. Я предлагаю вам использовать '&&' вместо ';', поэтому его можно отменить. –
Хорошее усиление Jack –
at более изящный imo, так как он не виснет процесс. – Eddie
команды вычисляются слева направо, поэтому первым ваш скрипт запускается на выполнение, то выход из него будет поступать в по команде, это нормальное поведение , Посмотрите на at man pages для получения дополнительной информации.
Проблема заключается в том, что вы запускаете скрипт и подаете вывод на команду at
. Что вам нужно сделать, это запустить команду at
с указанием пути к вашему скрипту в качестве параметра. Я не уверен в синтаксисе, но at -h
или man at
должен помочь.
at -f /path/to/my/script -t now +5 minutes
Это должно работать до планирования сценария для запуска в определенное время. Для получения дополнительной информации о команде «at
» попробуйте linuxmanpages.com. Я могу ошибаться (в настоящее время не тестировать систему Linux).
удачи в любом случае
попробовать этот
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 " "
}
И будет ли помогать downvoter объяснить? –