每30秒运行一次cron
好,所以我有一个cron,我需要运行每30秒…这是我有什么下面
*/30 * * * * /bin/bash -l -c 'cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'''
它运行,但是这是30分钟或30秒…而且我一直在阅读,如果我经常运行它,cron可能不是最好的工具。 有没有另一个更好的工具,我可以安装在Ubuntu的11.04这将是一个更好的select或有办法解决上述计划
你在分钟说明符中有*/30
,这意味着每一分钟,但是有一步30(换言之,每半小时)。 由于cron
不会下到分辨率的分辨率,所以你需要另外的方法。
有一种可能性,虽然有点混乱,但是有两个工作,一个偏移了30秒:
* * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
两个cron作业实际上每分钟运行一次,但是后者在执行该作业的“肉”之前将等待半分钟, /path/to/executable
。
你不能。 克朗拥有60秒的粒度。
* * * * * cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'' * * * * * sleep 30 && cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''
克朗的粒度在几分钟内, 并没有devise为每x
秒钟醒来运行的东西。 在一个循环内运行你的重复任务,它应该做你所需要的:
#!/bin/env bash while [ true ]; do sleep 30 # do what you need to here done
不需要两个cron条目,你可以把它放在一个:
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
所以在你的情况下:
* * * * * /bin/bash -l -c "cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'' ; sleep 30 ; cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\''"
你可以看看我的回答这个类似的问题
基本上,我已经包含了一个名为“runEvery.sh”的bash脚本,您可以每隔1分钟使用cron运行一次,并将parameter passing给您希望运行的实际命令以及您希望运行的频率。
像这样的东西
*/1 * * * * ~/bin/runEvery.sh 5 myScript.sh
Cron作业不能用于以秒为间隔安排作业。 即你不能安排一个cron作业每5秒运行一次。 另一种方法是编写一个使用sleep 5
命令的shell脚本。
使用bash while循环创build一个shell脚本every-5-seconds.sh,如下所示。
$ cat every-5-seconds.sh #!/bin/bash while true do /home/ramesh/backup.sh sleep 5 done
现在,使用nohup
在后台执行这个shell脚本,如下所示。 即使从会话中注销后,这也会继续执行脚本。 这将每5秒执行一次backup.sh shell脚本。
$ nohup ./every-5-seconds.sh &
使用fcron( http://fcron.free.fr/ ) – 可以在几秒钟内给出粒度,比cron(vixie-cron)更好,function更丰富,性能也更稳定。 我曾经做过愚蠢的事情,比如在一台机器上运行了大约60个PHP脚本,它们在非常愚蠢的环境下运行,而且它仍然在做它的工作!
使用手表:
$ watch --interval .30 script_to_run_every_30_sec.sh
可以使用Crontab作业以分钟/小时/天计划作业,但不能在几秒钟内完成。 替代scheme:
创build一个脚本,每30秒执行一次:
#!/bin/bash # 30sec.sh for COUNT in `seq 29` ; do cp /application/tmp/* /home/test sleep 30 done
使用crontab -e
和一个crontab来执行这个脚本:
* * * * * /home/test/30sec.sh > /dev/null