如何每10秒执行一次命令(无cron)?


36

当我执行cron我遇到这个错误

cron:无法打开或创建/var/run/crond.pid:权限被拒绝

那么,没有它怎么办cron

PS我想检查svn中的文件是否已更改,并且我有一个特殊的脚本。


如果没有权限,请尝试使用运行cron sudo
匿名

4
请记住,cron不会每10秒钟执行任何操作,它获得的最细粒度是每分钟一次。

如果要创建cronjob,则必须运行crontab -e以启动编辑器。要列出当前的专家,请运行crontab -l
Lekensteyn 2011年

@匿名我不知道root密码,所以sudo不会帮助我。
UAdapter 2011年

Answers:


59

要访问您的个人cron配置,应使用命令crontab -e(以编辑cron表)。

替代方法是watch命令:

watch -n10 command args

最后,更有效地监控文件系统事件,你可以使用inotifywait,从inotify-tools包。


1
值得一提的是,您最好将命令包装在双引号中,否则可能会导致意外结果。watch -n<timeout> "command(s) arg(s)"喜欢watch -n2 "ps ux | grep ss5"
阿喀琉斯(Achilles)'18

我发现很难watch接受使用管道和引号的长而复杂的命令。下面的while循环起作用了,但是当然应该总是先入睡,以避免pid失控。
rjurney

@rjurney:将整个命令用单引号或更好的双引号括起来就足够了:watch -n10 "ls -l | grep $foo"
enzotib

@enzotib当命令中有引号时,问题就来了,因为bash中的引号内的引号(上帝帮助我)几乎无法实现。从理论上讲应该是可以的,但是我很少放弃而不走另辟route径的方式在bash中实现嵌套引号。
rjurney

32

您可以编写sleep一个while循环中的shell脚本。

#!/bin/sh
while [ true ]
do
    sh special_svn_script.sh
    sleep 10
done

5
while true不需要方括号,否则将“ true”解释为一个字符串,并且每个字符串都与“ true”一样好。
enzotib

1
@enzotib,所以您不妨在周围写东西
Eduard Florinescu

在此方法有效的同时,您应该始终先入睡,因为可能会发生某些事情,导致无法达到睡眠步骤,在这种情况下,您会有失控的pid淹没某些东西。
rjurney

4

gnome-schedule(单击以Install now!使用您的软件中心的按钮)
是一个图形用户界面,它利用vixie-cron,dcron和at的功能来管理crontab文件,并提供了一种在计算机上安排任务的简便方法。它支持循环(定期)任务以及将来仅发生一次的任务。它是使用pygtk用Python编写的。

很棒的功能

  • 支持任务的自定义标题和图标,以便更轻松地跟踪它们
  • 模板支持,因此您不必一次又一次地创建相同的任务;这些文件保存在gconf中,可以很容易地随Linux发行版一起提供
  • 如果以root身份运行,则可以编辑任何用户的crontab和“ at”任务。
  • 易于理解的字符串,例如“每小时”而不是“ 0 * * * *”
  • crontab专家的高级模式
  • 提供一个“面板小程序”,您可以在其中通过下拉菜单管理任务
  • 预定义的常用表达式,例如:每分钟,每周,明天,下周日历允许您选择要执行任务的日期
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.