每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