我有一个脚本需要每五秒运行一次。我知道它cron
可以按分钟执行任务,但是有没有办法每秒运行一次?
答案1
Cron 只允许最少一分钟。你可以要做的就是编写一个无限循环的 shell 脚本来运行你的任务,然后休眠 5 秒。这样你的任务就会每 5 秒左右运行一次,具体取决于任务本身需要多长时间。
#!/bin/bash
while true; do
# Do something
sleep 5;
done
您可以创建一个my-task.sh
包含上述内容的文件,然后使用 运行它sh my-task.sh
。您也可以选择将其配置supervisor
为服务,以便它在系统启动时启动,等等。
这听起来确实像是你在做一些你可能不该做的事情。这感觉错误的。
答案2
您可以让一个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 秒运行一次吗?
答案3
只需使用循环:
while true ; do ./your-script & sleep 5; done
这将启动 your-script 作为后台作业,休眠 5 秒,然后再次循环。您可以使用 Ctrl-C 中止它,或者使用任何其他条件代替true
,例如! test -f /tmp/stop-my-script
仅在文件/tmp/stop-my-script
不存在时循环。
答案4
您可以使用 SystemD 计时器单元,它将每 5 秒触发一次服务 - 您已设置该服务来执行您想要的操作。
假设您的服务单元被调用mystuff.service
并安装在/etc/systemd/system
(签出SystemD 用户服务如果您想要替换用户的 crontab),那么您可以编写一个计时器单元,在启动时运行该服务,然后每 5 秒运行一次,如下所示:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
然后重新加载systemd配置,启用计时器单元并启动它。