我有一个脚本,需要每五秒钟运行一次。我知道那cron
可以在分钟内完成任务,但是有没有办法每秒运行某件事?
sleep 5
暂停(可能在一个循环中)5秒钟)...?
我有一个脚本,需要每五秒钟运行一次。我知道那cron
可以在分钟内完成任务,但是有没有办法每秒运行某件事?
sleep 5
暂停(可能在一个循环中)5秒钟)...?
Answers:
Cron仅允许至少一分钟。您可以做的是编写一个带有无限循环的Shell脚本,该脚本运行您的任务,然后休眠5秒钟。这样,您的任务将每5秒或多或少运行一次,具体取决于任务本身需要花费多长时间。
#!/bin/bash
while true; do
# Do something
sleep 5;
done
您可以my-task.sh
使用上面的内容创建一个文件,然后使用运行该文件sh my-task.sh
。(可选)您可以将其配置supervisor
为服务,以便在系统启动等时启动。
听起来确实确实在做某些您可能不应该做的事情。这感觉不对。
您可以cron
每分钟就有一个工作启动脚本,从而启动12个后台进程:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
不过,我的问题是,每5秒钟运行一次,您在地球上能做什么?
/media
目录中是否插入了用于自动备份的USB驱动器时,这对我很方便...
What on EARTH
-统计信息,垃圾收集,文件同步,在线状态,您可以为它命名。
只需使用一个循环:
while true ; do ./your-script & sleep 5; done
这将启动您的脚本作为后台作业,睡眠5秒钟,然后再次循环。您可以使用Ctrl-C中止它,或使用其他任何条件代替true
,例如! test -f /tmp/stop-my-script
仅在文件/tmp/stop-my-script
不存在时循环。
bash: syntax error near unexpected token ';'
,因此我将其取出。我有bash 4.3.11。我的命令运行很快,因此可以在前台运行。
./your-script
在后台运行(在5秒钟的睡眠过程中),则可以保留&
但将其删除;
。作为&
用于分离命令的目的,这是不必要的(显然不允许)具有;
后它在同一行上。另一种方法是在多行中编写循环(在换行符之后&
以及(也可以选择在换行符之后do
和之前done
)换行)。由于;
之后&
似乎是一个错字,因此我将其删除。blueyed:;
如果您确实需要,请随时放回它;如果是这样,我建议还添加一个解释。
您可以使用GNU软件包mcron,这是“ Vixie cron”的替代方案。
http://www.gnu.org/software/mcron/manual/mcron.html#Top
“可以轻松地指定更精细的时间点,即秒。原则上可以延长至微秒,但未实现。”
mcron
需要sendmail
默认安装并激活。如何禁用它?
cron中的最低配置为分钟,您无法设置5秒钟。您可以使用Quartz,它允许几秒钟。http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
使用仙人掌来监视路由器和交换机,但是Cron仅允许至少一分钟,因此,如果一个端口/设备出现故障,则直到两分钟后才发出警告。
您可以使用SystemD计时器单元,它每5秒钟触发一次服务-您已将其设置为执行所需的操作。
假设您的服务单元已被调用mystuff.service
并安装到其中/etc/systemd/system
(如果要替换用户的crontab,请签出SystemD用户服务),然后可以编写一个计时器单元以在启动时然后每5秒运行一次该服务,如下所示:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
然后重新加载systemd配置,启用计时器单元并启动它。
我已经非常成功地完成了此类操作(最终结果一次运行了数周,直到重新启动计算机为止)。至于我现在正在做什么,请更新信息并将其放入缓存-每10秒更新一次。
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
'exec $ 0'重新启动脚本,但替换正在运行的脚本。最初可以使用crontab'@reboot'行启动。
while
循环而不是反复重新启动脚本?