sleep 59
除了在脚本开头运行外,设置 crontab 命令每 59 秒运行一次的最方便的方法是什么?
如果没有其他建议,执行sleep 59
延迟是否会让我计划执行的所有其他 cron 条目都等到休眠条目完成?
更新我为什么需要它?我写了一个小脚本来找出最后一分钟谁登录了系统,它看起来像这样:
who | grep `date +%R` | awk '{ print $1 " joins us." }' | write $USER
为了让它发挥作用并且不让事情变得复杂,我需要它在最后一分钟运行。
答案1
这有一个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}'
输出带有逗号、“and”和复数动词一致以及删除重复短语(如果您希望所有内容都在一行上,则可以用空格替换换行符(最后一个除外):
Allen 加入我们
或者
比尔和
克里斯加入我们
或者
Dave、
Ellen 和
Felicity 加入我们
答案2
使用 cron 所能做的最好的事情就是每分钟运行一次:
# minute hour dom mon dow
* * * * * /path/to/command
答案3
sleep 59
不会耽误其他任务。
但这听起来很危险。如果你需要那么我预测你将陷入困境。
如果您解释了您的要求的原因,您可能会发现有人能够提供更好的治疗方法。
答案4
最好将脚本添加到所有用户的 .login 文件或 .bashrc 或类似文件中。
1) 只有当有人登录时它才会运行,因此效率更高。2) 当有人登录时它会立即运行,因此不会延迟。