我有一个程序,可以将内容输出到标准输出。我使用 cron 来安排它,这很好,因为我正在收集它通过电子邮件打印的内容并对其进行一些统计工作。我希望这基本上可以永远持续下去。
类似于问题538622,我还希望作业完成后能够自行“重新提交”。这无法通过无限循环脚本实现,因为我需要不断收集从 cron 通过电子邮件发送的内容。
如果可能的话,当计算机有 N 个 CPU 时,我还希望可以并行执行 N 个作业。
到目前为止,我已经安排作业每 X 分钟运行一次,但是由于计算机被其他人使用,因此这不是非常有效的时间利用方式,并且存在我的作业占满机器的风险,这些作业需要越来越长的时间(因此 X 分钟是不够的)。
你知道怎样做吗?
答案1
根据所提问题中的脚本,您可以将命令输出提取到文件中,并在一次迭代完成后通过电子邮件发送文件内容。在这种情况下,您可以有一个无限循环,当您使用 nohup 在后台启动它时,只要主机处于启动状态,它就可以运行。
示例脚本(在本例中称为 parse.sh)可以是:
while true
do
command &> /tmp/output_thread_$1
cat /tmp/output_thread_$1 | mail -s "output from thread $1" email@recipient
done
如果你使用以下方式调用脚本
for thread in 1 2 3 4; do nohup parse.sh $thread & done;
其中 4 是 CPU 数量。它将启动(在本例中)4 个进程来执行你的任务