Den*_*son 50
最有创意地 滥用Linux 命令的候选者:
nohup watch -n 30 --precise yourprog >/dev/null &
Run Code Online (Sandbox Code Playgroud)
如果yourprog包括:
date +%M.%S.%N >> yourprog.out
Run Code Online (Sandbox Code Playgroud)
那么yourprog.out可能看起来像:
50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676
Run Code Online (Sandbox Code Playgroud)
表示相当不错的精度水平。
下面是对命令部分的解释:
nohup-watch在这种情况下,这可以防止跟随它的命令在终端退出时退出。watch- 该程序重复运行一个命令。通常,每次watch运行该命令时,都会显示该命令的第一屏输出。-n 30- 运行命令的时间间隔。在这种情况下,它是每三十秒一次。--precise- 如果没有此选项,watch则在 间隔秒后运行命令。有了它,该命令的每次启动开始 上的间隔,如果可能的。如果示例中未指定此选项,则由于启动和执行命令 ( yourprog)所需的时间,时间会越来越晚,每次都会超过 30 秒。yourprog-watch要执行的程序或命令行。如果命令行包含 shell 特有的字符(例如空格或分号),则需要将其引用。>/dev/null- 大于号将正在运行的命令的输出重定向watch到文件 /dev/null. 该文件会丢弃写入其中的任何数据。这可以防止将输出写入屏幕,或者,由于nohup正在使用,它可以防止将输出发送到名为nohup.out.&-watch命令在后台运行,控制权返回给终端或父进程。请注意,nohup输出重定向和&后台控制运算符并非特定于watch.
以下是示例yourprog脚本的说明:
date- 输出当前日期和/或时间。它也可以设置它们。+%M.%S.%N- 这指定date要使用的输出格式。%M是当前分钟,%S是当前秒,%N是当前纳秒。>> yourprog.out- 这会将date命令的输出重定向到名为yourprog.out. 双大于号会导致每次调用时将输出附加到文件中,而不是覆盖之前的内容。编辑:
可能被滥用的另一件事(或者它可能是合法使用)是 systemd 计时器。
请参阅systemd/Timers 作为 cron 替代品和Cron vs systemd timers。
我会尽快发布一个例子。
小智 38
如果您的任务需要频繁运行,那么 cron 是错误的工具。除了它不会那么频繁地启动作业这一事实之外,如果作业运行时间超过启动间隔时间,您还会面临一些严重问题的风险。重写您的任务以进行守护进程并持久运行,然后在必要时从 cron 启动它(同时确保如果它已经在运行则不会重新启动)。
gho*_*oti 16
* * * * * /path/to/program
* * * * * sleep 30; /path/to/program
Run Code Online (Sandbox Code Playgroud)
不要忘记在您的程序中写入一些内容,以便在前一个实例已经在运行时退出。
#!/bin/sh
if ln -s "pid=$$" /var/pid/myscript.pid; then
trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
echo "Already running, or stale lockfile." >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
当然,这仍然留下非常小的失败机会,因此请在 google 中搜索适用于您的环境的更好的解决方案。
| 归档时间: |
|
| 查看次数: |
58371 次 |
| 最近记录: |