呼び出されてから 5 分後に bash スクリプトを実行したいだけです。私は何を間違っていますか?
私はコマンドを持っています:
/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 -f /path/to/my/script -t now +5 minutes
これは、特定の時間にスクリプトを実行するようにスケジュールする限り機能するはずです。at
" " コマンドの詳細については、linuxmanpages.comを試してください。私は間違った考えかもしれません(現在、テストするLinuxシステムではありません)。
とにかく頑張って
問題は、スクリプトを実行し、出力をat
コマンドにパイプすることです。必要なことはat
、スクリプトへのパスをパラメーターとして使用してコマンドを実行することです。構文はわかりませんが、at -h
役立つman at
はずです。
コマンドは左から右に評価されるため、最初にスクリプトが実行され、その出力が at コマンドにパイプされます。これは通常の動作です。詳細については、man ページを参照してください。
これを試して
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 " "
}