repeat
,其第一个参数是重复命令的次数,其中命令(带有任何参数)由repeat
的其余参数指定。例如,
% repeat 100 echo "I will not automate this punishment."
将回显给定的字符串100次,然后停止。
我想要一个类似的命令–我们称之为
forever
–有效类似地,除了第一个参数是重复之间要暂停的秒数,它会永远重复。例如,% forever 5 echo "This will get echoed every 5 seconds forever and ever."
我想在写之前会问这样的事情是否存在。我知道这就像2行Perl或Python脚本,但是也许有更标准的方法可以做到这一点。如果没有,请随意以您喜欢的脚本语言发布解决方案。
PS:也许更好的方法是将
repeat
推广为重复两次(用-1表示)表示无穷大)和重复之间的睡眠秒数。上述示例将变为:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
#1 楼
尝试使用watch
命令。Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
,以便:
watch -n1 command
将每秒运行一次命令(很好,从技术上讲,每秒加上
command
作为watch
(至少是procps
和busybox
实现)运行所需的时间永远在两次command
之间运行一秒钟。您会吗?想要将命令传递到
exec
而不是sh -c
,请使用-x
选项: > watch -n1 -x command
或者也可以从自制软件中获取它:
port install watch
评论
您可以使用MacPorts进行安装。 sudo port安装手表
–教皇
09年2月17日在0:27
也可在自制软件中进行(酿造手表)。
–莱尔
2011年5月12日21:45
+1获取新的强大工具。我曾经是真的。做X;睡Y;完成-这样更好。
–亚当·马坦(Adam Matan)
11年5月16日在11:14
这个工具的问题(至少在Ubuntu上)是强制全屏显示,因此如果我转储一些定期信息,则会丢失以前的信息。
–蝎子
2012年10月12日下午1:00
它在FreeBSD上称为cmdwatch(来自端口:sysutils / cmdwatch)。
– Ouki
2014年3月25日在21:29
#2 楼
Bashwhile
+ sleep
:while true
do
echo "Hi"
sleep 1
done
这里是速记式单缸纸的相同之处(来自以下注释): >
while sleep 1; do echo "Hi"; done
使用
;
分隔命令,并将sleep 1
用于while
测试,因为它始终返回true。您可以在循环中放置更多命令-只需用;
将它们分开评论
我相信它也可以像在普通的Bourne shell中编写的那样工作。
– dmckee ---前主持人小猫
09年2月17日在0:24
@dreeves,使用“;”作为分隔符,命令可以在一行中执行。以Toony的答案为例
–bbaja42
2012年1月12日9:00
sleep 1始终返回true,因此可以将其用作while条件。不是世界上最易读的东西,而是绝对合法的东西:睡眠1;做回声“嗨”;完成
–大卫·科斯塔(David Costa)
2012年1月12日上午10:46
@David Costa:您的观点很合理,但睡眠并不一定总能成真。 Ī̲使用了这样的循环(尽管延迟更长),这是因为可以通过终止睡眠过程来优雅地终止循环。
– Incnis Mrsi
2015年9月12日在22:53
@IncnisMrsi我没想到,它实际上仅在经过时间后才返回零,而在信号终止时返回非零。感谢您指出
–大卫·科斯塔(David Costa)
2015年9月13日在9:58
#3 楼
这只是其他while+sleep
答案的简短版本,如果您经常将此类任务作为日常工作运行,则使用它可以避免不必要的按键操作,并且如果您的命令行开始变得更长一点,则可以轻松地理解这一点。但这首先要从睡眠开始。如果您需要跟踪具有单行输出的内容(例如机器负载),这通常会很有用:
while sleep 1; do uptime; done
评论
是。这应该记录在UUOC旁边。
–约翰
13年3月15日在9:05
而且,如果您希望它像“手表”一样运行,您可以边清除边做;约会;命令;睡眠5;完成
–约翰
13年3月15日在9:12
哇,感谢您的睡眠组合,节省了按键!
–乔治Y。
16年5月5日在2:34
#4 楼
到目前为止,所有发布的答案都存在的一个问题是命令的执行时间可能会漂移。例如,如果您在命令之间执行sleep 10
,并且该命令需要2秒钟才能运行,那么它将每12秒钟运行一次;如果运行所需的时间是可变的,那么从长远来看,运行的时间可能是不可预测的。这可能正是您想要的;如果是这样,请使用其他解决方案之一,或者使用该解决方案来简化
sleep
调用。对于一分钟的解析,cron作业将在指定的时间运行,而不管每个命令花费多长时间。 。 (实际上,即使上一个仍在运行,新的cron作业也会启动。)
这是一个简单的Perl脚本,该脚本一直休眠到下一个间隔,例如,间隔为10秒的命令即使命令本身需要几秒钟,它也可能会在12:34:00、12:34:10、12:34:20等处运行。如果命令运行的时间超过
interval
秒,则将跳过下一个间隔(与cron不同)。该时间间隔是相对于纪元计算的,因此将在UTC午夜运行86400秒(1天)的时间间隔。 > 评论
另见其他问题
–StéphaneChazelas
2012年10月21日,9:52
使用bash更简单,以最大程度地减少漂移(尽管由于sleep命令它可能会在很长的使用时间范围内漂移,并且bash本身会累积其很小的执行时间):睡1m&命令;等待;完成
–数学
17 Sep 14 '13:53
@数学:聪明。如果您在当前shell中运行了其他后台进程,则此命令将不起作用(wait将等待所有后台进程)。这可以通过更改wait to wait $!来解决,其中$!是睡眠过程的PID。将其发布为答案,我将对其进行投票。但是,它确实在交互式shell中产生了一些无关的输出。
–基思·汤普森(Keith Thompson)
17年9月14日在20:59
#5 楼
我认为到目前为止,所有答案都太复杂了,或者回答了一个不同的问题:”“如何重复运行程序,以便有X秒的延迟从程序完成到下一次启动之间。”
真正的问题是:“如何每隔X秒运行程序”
当命令需要一些时间才能完成时,这是两个非常不同的事情。
以脚本
foo.sh
为例(假设这是一个需要几秒钟才能完成的程序)。 /> #!/bin/bash
# foo.sh
echo `date +"%H:%M:%S"` >> output.txt;
sleep 2.5;
# ---
您希望每秒运行一次,大多数人会建议
watch -n1 ./foo.sh
或while sleep 1; do ./foo.sh; done
。但是,这给出了输出:15:21:20
15:21:23
15:21:27
15:21:30
15:21:34
并不是每秒钟都在精确运行。即使使用
-p
标志,正如man watch
页面所建议的那样,也可以解决此问题,结果是相同的。背景。换句话说:while sleep 1; do (./foo.sh &) ; done
这就是全部。
您可以每500毫秒使用
sleep 0.5
运行它,或者执行其他操作有你吗?评论
那些对不同答案进行投票的人不理解您答案的优雅...
– Serge Stroobandt
15年6月26日在22:58
除非您的程序有副作用,否则这很好。如果程序花费的时间超过间隔时间,则可能会产生副作用(例如覆盖文件)。如果程序正在等待其他东西,而其他东西却要永远消耗,那么您将无限期地启动越来越多的后台作业。请谨慎使用。
–约瑟芬·穆勒(Josephine Moeller)
15年7月16日在20:36
可以反转后台的顺序,以确保一次只运行一个./foo.sh,但不超过每秒1。睡觉1&./foo.sh;等待;完成
–数学
17年9月14日在13:57
是的,它会在每个循环上漂移几毫秒,但是会漂移。在foo.sh中添加日期+“%H:%M:%S.%N”,以查看分数在每个循环中将如何缓慢增加。
–艾萨克
18年7月24日在12:53
是的,大多数答案的确没有从字面上解决这个问题。但是,几乎可以肯定的是,他们会回答OP的要求。如果OP确实接受了答案,那将是一个更安全的选择。但是,这很好,只要您知道可能的副作用,并且可以确定命令的平均运行时间不会超过周期时间即可。
–澳大利亚
18年7月26日在11:17
#6 楼
在bash
中:bash -c 'while [ 0 ]; do echo "I will not automate this punishment in absurdum."; done'
(
echo
可以用任何命令代替... ,或者在
perl
中:>
perl -e 'for (;1;) {print "I will not automate this punishment in absurdum.\n"}'
其中
print "I will not automate this punishment in absurdum.\n"
可以用反引号(`)包围的“ any”命令代替。 br /> bash -c 'while [ 0 ]; do echo "I will not automate this punishment in absurdum."; sleep 1; done'
和
perl -e 'for (;1;) {print "I will not automate this punishment in absurdum.\n"; sleep 1}'
评论
而[0]是一种不好的写法。这意味着0是一个长度大于0的字符串。而[1]或[jeff]会做同样的事情。最好写成真。
– Mikel
2011年4月5日上午10:17
@Mikel:或同时:
–基思·汤普森(Keith Thompson)
2012年1月12日上午9:27
#7 楼
在最新的Linux内核下,最新的bash> = 4.2,基于答案。为了限制执行时间,没有分叉!仅使用内置函数。
为此,我使用
read
内置函数而不是sleep
。不幸的是,这不适用于Notty会话。快速bash函数“
repeat
”根据要求: repeat () {
local repeat_times= repeat_delay= repeat_foo repeat_sleep
read -t .0001 repeat_foo
if [ $? = 1 ] ;then
repeat_sleep() { sleep ;}
else
repeat_sleep() { read -t repeat_foo; }
fi
shift 2
while ((repeat_times)); do
((repeat_times=repeat_times>0?repeat_times-1:repeat_times))
"${@}"
((repeat_times))&& ((10#${repeat_delay//.})) &&
repeat_sleep $repeat_delay
done
}
取决于所提交命令的粒度和持续时间...
在最新的Linux内核中,存在一个包含时间信息的procfile
/proc/timer_list
纳秒。 如果您想精确地每秒运行一次命令,那么您的命令必须在不到一秒钟的时间内结束!然后从那里开始,只需
sleep
当前的剩余时间即可。如果延迟更为重要,并且您的命令不需要大量时间,则可以:
repeat 3 0 printf "Now: %(%T)T, Hello %s.\n" -1 Guy
Now: 15:13:43, Hello Guy.
Now: 15:13:43, Hello Guy.
Now: 15:13:43, Hello Guy.
repeat -1 .5 printf "Now: %(%T)T, Hello %s.\n" -1 Guy
Now: 15:14:14, Hello Guy.
Now: 15:14:14, Hello Guy.
Now: 15:14:15, Hello Guy.
Now: 15:14:15, Hello Guy.
Now: 15:14:16, Hello Guy.
Now: 15:14:16, Hello Guy.
Now: 15:14:17, Hello Guy.
Now: 15:14:17, Hello Guy.
Now: 15:14:18, Hello Guy.
Now: 15:14:18, Hello Guy.
^C
但是,如果您的目标是获得更细的粒度,则必须:
使用纳秒级的信息来等待一秒钟......
/>为此,我编写了一个bash函数:
command=(echo 'Hello world.')
delay=10
while :;do
printf -v now "%(%s)T" -1
read -t $(( delay-(now%delay) )) foo
${command[@]}
done.
采购它们后,您可以:
# bash source file for nano wait-until-next-second
mapfile </proc/timer_list _timer_list
for ((_i=0;_i<${#_timer_list[@]};_i++));do
((_c+=${#_timer_list[_i]}))
[[ ${_timer_list[_i]} =~ ^now ]] && TIMER_LIST_READ=$_c
[[ ${_timer_list[_i]} =~ offset:.*[1-9] ]] && \
TIMER_LIST_OFFSET=${_timer_list[_i]//[a-z.: ]} && \
break
done
unset _i _timer_list _c
readonly TIMER_LIST_OFFSET TIMER_LIST_READ
waitNextSecondHires() {
local nsnow nsslp
read -N$TIMER_LIST_READ nsnow </proc/timer_list
nsnow=${nsnow%% nsecs*}
nsnow=$((${nsnow##* }+TIMER_LIST_OFFSET))
nsslp=$((2000000000-10#${nsnow:${#nsnow}-9}))
read -t .${nsslp:1} foo
}
直接在命令行上运行
${command[@]}
,而不是与command=(echo 'Hello world.')
while :;do
waitNextSecondHires
${command[@]}
done.
进行比较,这必须给出完全相同的结果。
雇用bash函数“
repeat
“,可根据要求进行:您可以来源:
command=(eval "echo 'Hello world.';sleep .3")
while :;do
waitNextSecondHires
${command[@]}
done.
然后尝试:
mapfile </proc/timer_list _timer_list
for ((_i=0;_i<${#_timer_list[@]};_i++));do
((_c+=${#_timer_list[_i]}))
[[ ${_timer_list[_i]} =~ ^now ]] && TIMER_LIST_READ=$_c
[[ ${_timer_list[_i]} =~ offset:.*[1-9] ]] && \
TIMER_LIST_OFFSET=${_timer_list[_i]//[a-z.: ]} && \
break
done
unset _i _timer_list _c
readonly TIMER_LIST_OFFSET TIMER_LIST_READ
repeat_hires () {
local repeat_times= repeat_delay= repeat_foo repeat_sleep repeat_count
read -t .0001 repeat_foo
if [ $? = 1 ] ;then
repeat_sleep() { sleep ;}
else
repeat_sleep() { read -t repeat_foo; }
fi
shift 2
printf -v repeat_delay "%.9f" $repeat_delay
repeat_delay=${repeat_delay//.}
read -N$TIMER_LIST_READ nsnow </proc/timer_list
nsnow=${nsnow%% nsec*}
started=${nsnow##* }
while ((repeat_times)); do
((repeat_times=repeat_times>0?repeat_times-1:repeat_times))
"${@}"
((repeat_times)) && ((10#$repeat_delay)) && {
read -N$TIMER_LIST_READ nsnow </proc/timer_list
nsnow=${nsnow%% nsec*}
nsnow=${nsnow##* }
(( (nsnow - started) / 10#$repeat_delay - repeat_count++ )) &&
printf >&2 "WARNING: Command '%s' too long for %f delay.\n" \
"${*}" ${repeat_delay:0:${#repeat_delay}-9
}.${repeat_delay:${#repeat_delay}-9}
printf -v sleep "%010d" $((
10#$repeat_delay - ( ( nsnow - started ) % 10#$repeat_delay ) ))
repeat_sleep ${sleep:0:${#sleep}-9}.${sleep:${#sleep}-9}
}
done
}
评论
read -t是内置的,而睡眠不是。这可能会产生边界效应(例如,悄悄地敲击[key:return]中断睡眠),但这可以通过测试$ foo来解决。
– F. Hauri
2014年1月29日在17:34
令人印象深刻的答案
– Gena2x
2014年6月4日13:37
#8 楼
Perl #!/usr/bin/env perl
# First argument is number of seconds to sleep between repeats, remaining
# arguments give the command to repeat forever.
$sleep = shift;
$cmd = join(' ', @ARGV);
while(1) {
system($cmd);
sleep($sleep);
}
#9 楼
如果您不打算在屏幕上显示消息,并且如果您有能力在几分钟内重复执行此任务,那么crontab也许是您最好的工具。例如,如果您希望每分钟执行一次命令,则可以在crontab
文件中编写如下代码:* * * * * my_precious_command
请查看教程以获取更多示例。另外,您可以使用Crontab代码生成器轻松设置时间。
#10 楼
Bash及其某些同类外壳具有方便的(( ... ))
表示法,可以在其中计算算术表达式。因此,为应对第三个挑战,即重复次数和每次重复之间的延迟都应可配置,这是一种解决方法:
repeat=10
delay=1
i=0
while (( i++ < repeat )); do
echo Repetition $i
sleep $delay
done
基思答案中涉及的时序漂移也使该答案受到影响。
评论
这是最好的。
–艾哈迈德·阿威斯(Ahmad Awais)
18年7月17日在23:49
#11 楼
试试看(Bash): forever () {
TIMES=shift;
SLEEP=shift;
if [ "$TIMES" = "-1" ]; then
while true;
do
$@
sleep $SLEEP
done
else
repeat "$TIMES" $@
fi; }
评论
我不喜欢shell,因此欢迎进行改进。而且我的发行版中似乎没有“ repeat”命令。
– Gregg Lind
09年2月17日,0:40
重复特定于csh和tcsh。
–基思·汤普森(Keith Thompson)
2012年1月12日上午9:42
@KeithThompson:和zsh
–雷神
17年8月2日,9:57
#12 楼
如gbrandt所述,如果watch
命令可用,则一定要使用它。但是,某些Unix系统默认情况下未安装它(至少它们在我无法使用的地方)。 :while [ 1 ] ; do
<cmd>
sleep <x>
echo ">>>>>>>>>>>>>" `date` ">>>>>>>>>>>>>>"
done
编辑:我删除了一些“。”在最后一个echo语句中...我的Perl日子中的保持状态;)
评论
while [1]仅工作是因为将1视为字符串,就像while [-n 1]一样。 while [0]或while [jeff]会做同样的事情。而真实则更有意义。
– Mikel
2011年4月5日上午10:19
#13 楼
如果我们两个都怎么办?这里是一个主意:只有“间隔”,它会永远重复。使用“ interval”和“ times”,它将重复此次数,并用“ interval”隔开。
用法:
因此,算法为:
列表项
如果$ 1仅包含数字,则为间隔(默认2)
如果$ 2仅包含数字,则其为是次数(默认无限)
使用这些参数进行while循环
sleep“ interval”
如果已给出次数,则减小var直到达到
因此:
$ loop [interval [times]] command
评论
注意:尽管睡眠可以接受浮球,但它不适用于浮球。
–男爵
13年11月11日在22:37
#14 楼
我最终在swalog的答案上创建了一个变体。有了他,您必须等待X秒才能进行第一次迭代,因此我也在前台运行。.../foo.sh;while sleep 1; do (./foo.sh) ; done
#15 楼
您可以从shell的python解释器中获得强大的功能。python3 -c "import time, os
while True:
os.system('your command')
time.sleep(5)
可以在任意时间(秒)内替换五个。
注意: return使用SHIFT + ENTER返回shell中的输入。并且不要忘记在while循环的每一行中键入4 SPACE缩进。
评论
请注意,python的os.system()执行shell来解释命令行,因此调用python在循环中运行shell以定期运行命令有点过头。您不妨在Shell中做所有事情。
–StéphaneChazelas
18年6月26日在11:26
我同意你的看法。但是,如每个循环中所述,睡眠时间为5秒。因此,启动新外壳所产生的额外费用可以忽略。如果此费用使周期长于预期,则可以根据需要减少一些睡眠时间。
– pah8J
18-6-27在8:09
#16 楼
快速,肮脏并且可能很容易启动,但是如果您喜欢冒险并且知道自己在做什么,请将其放入repeat.sh
和chmod 755
,while true
do
eval
sleep
done
调用它带有
./repeat.sh <command> <interval>
我的间谍意识说这可能是一种邪恶的方式,我的间谍意识对吗?
评论
评估!?做什么的?睡觉$ 1;转移; “ $ @”或类似的词会更好。
– Mikel
2012年4月20日在2:01
Dunno为什么这是-2。评估可能是过大的……除非您需要。通过Eval,您可以将诸如重定向之类的内容输入命令行。
–约翰
13年3月15日在9:07
#17 楼
您可以从init运行脚本(在/ etc / inittab中添加一行)。该脚本必须运行您的命令,等待您想要等待的时间,直到再次运行该脚本,然后退出。退出后,Init会再次启动脚本。#18 楼
从crontab以少于一分钟的间隔(例如20秒)重复执行作业的简单方法:* * * * * script.sh
script.sh:
#!/bin/bash
>>type your commands here.
sleep 20
>>retype your commands here.
sleep 20
>>retype your commands here.
#19 楼
您可以获取此递归函数:#!/bin/bash
ininterval () {
delay=
shift
$*
sleep $delay
ininterval $delay $*
}
或添加一个:
ininterval $*
并调用脚本。
#20 楼
要在控制台窗口中反复运行命令,我通常会运行以下命令:while true; do (run command here); done
这也适用于多个命令,例如,显示不断更新的时钟在控制台窗口中:
while true; do clear; date; sleep 1; done
评论
为什么要投票?通过将示例复制并粘贴到终端窗口中,可以看到这是一个可行的解决方案。
–托马斯·布拉特(Thomas Bratt)
13年1月27日在14:20
我认为您被否决了,因为这有点危险并且会占用CPU。
– ojblass
13年7月6日在20:22
#21 楼
#! /bin/sh
# Run all programs in a directory in parallel
# Usage: run-parallel directory delay
# Copyright 2013 by Marc Perkel
# docs at http://wiki.junkemailfilter.com/index.php/How_to_run_a_Linux_script_every_few_seconds_under_cron"
# Free to use with attribution
if [ $# -eq 0 ]
then
echo
echo "run-parallel by Marc Perkel"
echo
echo "This program is used to run all programs in a directory in parallel"
echo "or to rerun them every X seconds for one minute."
echo "Think of this program as cron with seconds resolution."
echo
echo "Usage: run-parallel [directory] [delay]"
echo
echo "Examples:"
echo " run-parallel /etc/cron.20sec 20"
echo " run-parallel 20"
echo " # Runs all executable files in /etc/cron.20sec every 20 seconds or 3 times a minute."
echo
echo "If delay parameter is missing it runs everything once and exits."
echo "If only delay is passed then the directory /etc/cron.[delay]sec is assumed."
echo
echo 'if "cronsec" is passed then it runs all of these delays 2 3 4 5 6 10 12 15 20 30'
echo "resulting in 30 20 15 12 10 6 5 4 3 2 executions per minute."
echo
exit
fi
# If "cronsec" is passed as a parameter then run all the delays in parallel
if [ = cronsec ]
then
q4312078q 2 &
q4312078q 3 &
q4312078q 4 &
q4312078q 5 &
q4312078q 6 &
q4312078q 10 &
q4312078q 12 &
q4312078q 15 &
q4312078q 20 &
q4312078q 30 &
exit
fi
# Set the directory to first prameter and delay to second parameter
dir=
delay=
# If only parameter is 2,3,4,5,6,10,12,15,20,30 then automatically calculate
# the standard directory name /etc/cron.[delay]sec
if [[ "" =~ ^(2|3|4|5|6|10|12|15|20|30)$ ]]
then
dir="/etc/cron.sec"
delay=
fi
# Exit if directory doesn't exist or has no files
if [ ! "$(ls -A $dir/)" ]
then
exit
fi
# Sleep if both $delay and $counter are set
if [ ! -z $delay ] && [ ! -z $counter ]
then
sleep $delay
fi
# Set counter to 0 if not set
if [ -z $counter ]
then
counter=0
fi
# Run all the programs in the directory in parallel
# Use of timeout ensures that the processes are killed if they run too long
for program in $dir/* ; do
if [ -x $program ]
then
if [ "0$delay" -gt 1 ]
then
timeout $delay $program &> /dev/null &
else
$program &> /dev/null &
fi
fi
done
# If delay not set then we're done
if [ -z $delay ]
then
exit
fi
# Add delay to counter
counter=$(( $counter + $delay ))
# If minute is not up - call self recursively
if [ $counter -lt 60 ]
then
. q4312078q $dir $delay &
fi
# Otherwise we're done
#22 楼
使用zsh
和接受浮点参数的sleep
实现:typeset -F SECONDS=0 n=0
repeat 100 {cmd; sleep $(((n+=3) - SECONDS))}
或
forever
:for ((;;)) {cmd; sleep $(((n+=3) - SECONDS))}
如果您的
sleep
不支持浮点数,则始终可以将其重新定义为zsh
内置的zselect
的包装:zmodload zsh/zselect
sleep() zselect -t $((( * 100) | 0))
#23 楼
此解决方案适用于Mac OS X v10.7(Lion)。bash -c 'while [ 0 ]; do \
echo "I will not automate this punishment in absurdum."; done'
以我为例
bash -c 'while [ 0 ]; do ls; done'
bash -c 'while [ 0 ]; do mv "Desktop/* Documents/Cleanup"; done'
不断清理我的桌面。
评论
您的意思是在那里有一个睡眠命令吗?
–基思·汤普森(Keith Thompson)
2012年1月12日上午9:41
而[0]是编写无限循环的奇怪方法;它起作用是因为测试命令(也称为[])将非空字符串视为true。当:;做...;完成是比较习惯的,或者如果愿意,可以在true时使用;做...;完成。
–基思·汤普森(Keith Thompson)
2012年1月17日在8:11
#24 楼
...我想知道解决这个问题时能创建多少复杂的解决方案。这么容易...
open /etc/crontab
在文件末尾添加1下一行,例如:
*/NumberOfSeconds * * * * user /path/to/file.sh
如果要每1秒运行一次,只需将其放在这里:
*/60 * * * * root /path/to/file.sh
where that file.sh could be chmod 750 /path/to/file.sh
,并在该文件内。sh应该是:
#!/bin/bash
#What does it do
#What is it runned by
your code or commands
就这样!
享受!
评论
这是不正确的。 * / 60每60分钟运行一次,* / 5例如每5分钟运行一次。
–米卡
13年10月2日在17:47
在crontab上不允许秒
– GAD3R
17年11月30日在12:12
在回答错误之前先测试一下自己的东西。
– sjas
19年8月19日在19:31
#25 楼
until ! sleep 60; do echo $(date); command; command; command; done
对我有用。
我不需要每60秒一遍。
“监视”并不监视所有系统上的命令< br“ watch”只能接受一个命令(或脚本文件)
将睡眠置于条件而不是主体中,可以使循环更好地被中断(因此要求对stackoverflow的类似问题做出答复。不幸的是我现在能找到它)
我想在延迟之前执行一次,所以我用直到直到代替while
评论
我只是注意到,“直到”显然也要在第一次迭代之前执行睡眠。有什么办法可以将条件放在bash循环的末尾?
– Titus
16年6月11日在13:04
评论
为什么不:重复[-t时间] [-n号]命令[args ...]?凉。不幸的是,在我的Ubuntu和AIX上都找不到命令。您可以重复输入一次,让我知道它的来源吗?
我也在Ubuntu上,没有重复安装。有关如何安装此程序的任何信息将很有帮助。
repeat是csh和tcsh中的内置命令。
@ KeithThompson,csh,tcsh和zsh。尽管它比内置关键字更多,但它是一个关键字