Voglio solo uno script bash da eseguire 5 minuti dopo la chiamata. Che cosa sto facendo di sbagliato?script bash da eseguire in 5 minuti
ho il comando:
/path/to/my/script | at now + 5 min
Eppure lo script viene eseguito subito ogni volta.
Voglio solo uno script bash da eseguire 5 minuti dopo la chiamata. Che cosa sto facendo di sbagliato?script bash da eseguire in 5 minuti
ho il comando:
/path/to/my/script | at now + 5 min
Eppure lo script viene eseguito subito ogni volta.
si sta eseguendo immediatamente la sceneggiatura e l'invio sua uscita in at
. È necessario inviare il nome dello script stesso in at
:
echo /path/to/my/script | at now + 5 min
come circa:
sleep 300 && /path/to/my/script
Sì, questo qu l'estione non aveva davvero bisogno di "a". Ti suggerisco di usare '&&' invece di ';', quindi può essere cancellato. –
Nice enhancement Jack –
at è più grazioso in quanto non appende un processo. – Eddie
I comandi vengono valutati da sinistra a destra, quindi prima lo script viene eseguito, l'uscita di esso sarà reindirizzato al comando AT, questo è un comportamento normale . Dai un'occhiata allo at man pages per maggiori informazioni.
Il problema è che si sta eseguendo lo script e si esegue il piping dell'output al comando at
. Quello che devi fare è eseguire il comando at
con il percorso del tuo script come parametro. Non sono sicuro della sintassi, ma at -h
o man at
dovrebbe essere d'aiuto.
at -f /path/to/my/script -t now +5 minutes
Questo dovrebbe funzionare fino alla pianificazione di uno script da eseguire in un momento specifico. Per ulteriori informazioni sul comando "at
" provare linuxmanpages.com. Potrei sbagliarmi a pensare (attualmente non su un sistema linux per testare).
Buona fortuna comunque
provare questo
sys.scheduled_run /path/to/my/script 5
funzione principale
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
}
funzione di conto alla rovescia
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 " "
}
E il downferer dovrebbe preoccuparsi di spiegarlo? –