我有一个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上,这将是一个更好的选择?有没有办法修复上面的cron?
Cron作业不能用于以秒为间隔调度作业。例如,你不能安排一个cron作业每5秒运行一次。另一种方法是编写一个使用sleep 5命令的shell脚本。
使用bash while循环每5秒创建一个shell脚本。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 &
Linux Cron基于时间的调度器默认情况下不会执行间隔小于1分钟的作业。这个配置将向您展示一个简单的技巧,如何使用Cron基于时间的调度器以秒为间隔执行作业。让我们从基础开始。以下cron作业每分钟执行一次:
* * * * * date >> /tmp/cron_test
上述作业将每分钟执行一次,并将当前时间插入到/tmp/cron_test文件中。这很简单!但是,如果我们想每30秒执行一次相同的作业呢?为此,我们使用cron来安排两个完全相同的作业,但是使用sleep命令将第二个作业的执行推迟30秒。例如:
* * * * * date >> /tmp/cron_test
* * * * * sleep 30; date >> /tmp/cron_test
你可以将脚本作为服务运行,每30秒重新启动一次
注册服务
sudo vim /etc/systemd/system/YOUR_SERVICE_NAME.service
粘贴下面的命令
Description=GIVE_YOUR_SERVICE_A_DESCRIPTION
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
ExecStart=YOUR_COMMAND_HERE
Restart=always
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
重新加载服务
sudo systemctl daemon-reload
启用服务
sudo systemctl enable YOUR_SERVICE_NAME
启动服务
sudo systemctl start YOUR_SERVICE_NAME
检查您的服务状态
systemctl status YOUR_SERVICE_NAME