我有一个使用shell脚本从当前日期开始两分钟后自动执行命令。让我们说我目前的时间是以下格式。脚本应该读取当前时间,将现有时间加上两分钟,即2014-09-10T09-23-34,然后执行剩余的脚本。
date +"%Y"-"%m"-"%d"T"%H"-"%M"-"%S"
2014-09-10T09-21-34
答案 0 :(得分:1)
使用:
sleep(120)
程序将到达此命令所在的行,等待120秒(2分钟),然后继续执行。
下次请先尝试谷歌搜索,你可以在那里轻松找到它。
编辑:如果由于某种原因你坚持不使用sleep
,你可以使用:
import time
start = time.time()
while (time.time() - start) < 120:
pass
答案 1 :(得分:1)
在bash中获取日期字符串:
echo "Current: " $(date +"%Y"-"%m"-"%d"T"%H"-"%M"-"%S")
echo "+2 min : " $(date --date="@$(($(date +%s)+120))" +"%Y"-"%m"-"%d"T"%H"-"%M"-"%S")
打印
Current: 2014-09-10T15-58-15
+2 min : 2014-09-10T16-00-15
从字符串中读取时间并打印+ 2分钟字符串
str="2014-09-10T15-58-15"
new=$(date --date="@$(($(
IFS="-T" read y m d H M S <<< "$str";date --date="$y-$m-${d}T$H:$M:$S" +%s
)+120))" +"%Y"-"%m"-"%d"T"%H"-"%M"-"%S")
echo "From string: $str"
echo "String +2m : $new"
打印
From string: 2014-09-10T15-58-15
String +2m : 2014-09-10T16-00-15
执行来自“当前时间”的命令,正如其他人已经说过的那样,使用:
sleep 120 ; commands...
按照字符串中的指定,在2分钟后执行命令:
sec2date() { date --date="@$1"; }
countdown() { s="$1";while (($s)) ; do printf "%04d\r" $s; sleep 1; let s--; done; }
str="2014-09-10T16-55-10"
current=$(date +%s)
stringsec=$(IFS="-T" read y m d H M S <<< "$str";date --date="$y-$m-${d}T$H:$M:$S" +%s)
wanted=$(date --date="@$(($stringsec + 120))" +%s)
diffsec=$(($wanted - $current))
(( $diffsec > 0 )) || { echo "Can't execute in the past" ; exit 1; }
echo "time in the string :" $(sec2date $stringsec)
echo "+2min = execute at :" $(sec2date $wanted)
echo "current time :" $(date)
echo "need wait :" $diffsec
countdown $diffsec
echo "running at :" $(date)
打印
time in the string : st sep 10 16:55:10 CEST 2014
+2min = execute at : st sep 10 16:57:10 CEST 2014
current time : st sep 10 16:56:52 CEST 2014
need wait : 18
running at : st sep 10 16:57:10 CEST 2014
或者,只需使用at
命令即可。 :):)
答案 2 :(得分:0)
使用(cmd是你的命令):
睡眠120&amp;&amp; CMD
最终使用这个python 2.7脚本(保存为cron.py):
import datetime
import os
import sys
d = datetime.datetime.now() + datetime.timedelta(minutes=2)
txt = "%s %s %s %s * %s " % (d.minute, d.hour, d.day, d.month, sys.argv[1])
print txt
os.system( "echo '" + txt + "' >> /var/spool/cron/crontabs/root")
然后运行:
python cron.py cmd
在这种情况下,它不会完全是120秒。