除了在脚本开始处运行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