每59秒运行一次crontab命令

除了在脚本开始处运行sleep 59以外,设置每59秒执行一次crontab命令的最方便的方法是什么?

如果没有其他的build议,将执行sleep 59延迟所有其他cron条目计划执行等待,直到睡眠完成?

更新为什么我需要它? 我写了一个小脚本来找出谁在最后一刻login了系统,看起来像这样:

 who | grep `date +%R` | awk '{ print $1 " joins us." }' | write $USER 

为了它的工作,而不是让事情变得复杂,我需要它运行在一分钟结束。

这有一个date命令,看看前一分钟:

 who | grep `date -d "now -1 min" +%R` | awk '{ print $1 " joins us." }' | write $USER 

然后你可以用cron在一分钟内运行它:

 * * * * * /some/dir/scriptname 

你甚至可以这样做:

 who | grep `date -d "now -60 sec" +%R` | awk '{ print $1 " joins us." }' | write $USER 

编辑 :这是一个免费的:

 awk 'FNR > 2 {printf ",\n"} {printf "%s", name; name = $0; next} END {conj = " and\n"; if (FNR == 1) {singular = "s"; conj = ""}; printf "%s%s join%s us\n", conj, name, singular}' 

用逗号输出,“和”复数动词的一致性和重复短语的删除(如果你希望全部在一行上,可以用空格replace换行符(除了最后一行):

艾伦join我们

要么

账单和
克里斯join我们

要么

戴夫,
艾伦和
幸福join我们

你可以用cron做的最好的是每分钟运行一次:

 # minute hour dom mon dow * * * * * /path/to/command 

sleep 59不会延误其他任务。

但它闻起来像危险。 如果你需要这样的粒度水平,那么我预测你会变得僵硬。

如果你解释你的要求的原因,你可能会发现有人能够提供更好的治疗。

cron是不是那么准确。 如果你需要这样的精确度,你应该考虑编写一个守护进程。

你有没有考虑在auth.log上使用tail -f,只是不断的注册login?

将脚本添加到所有用户.login文件或.bashrc或类似的文件会更好。

1)只有当有人login时才会运行,所以更有效率。 2)当有人login时它会立即运行,所以没有任何延迟。

我只是提到, zsh有一个内置的watch ,就是这样做的。 (虽然,你必须使用zsh,并使用你的shell,看看它:它不会popup其他terminal。)

简而言之,将其添加到您的.zshrc

 watch=notme