【问题标题】:Crontab closing background process?crontab 关闭后台进程?
【发布时间】:2018-12-14 20:49:01
【问题描述】:

我正在测试一个 bash 脚本,我希望将其作为 cron 作业运行,以扫描下载日志并对图像文件执行劳动密集型转换。为了一次运行多个转换,第一个脚本循环下载日志并将文件名发送到第二个脚本,我将其设置为使用 & 作为后台进程运行。

脚本对运行良好,但是当该过程完成后,我必须按回车键才能返回命令提示符。当我运行测试时,这不是问题,但我不确定这种行为在作为 cron 作业运行时是否会产生影响。

这会是个问题吗?如果是这样,有没有办法关闭从 crontab 运行第一个脚本的“终端”?

这是我的代码的截断形式:

脚本 1(由 crontab 启动):

for i in file1 file2 file3 etc
do
bash /path/to/convert.sh $i &
done
exit 0

脚本 2 (convert.sh)

fileName=${1?no file given}
jpegName=$(echo $fileName | sed s/tif/jpg/g)
convert $fileName $jpegName
exit 0

感谢您提供的任何帮助/保证!

【问题讨论】:

  • 您无需执行任何操作即可返回命令提示符,您应该在脚本 1 完成后立即获得提示。
  • 脚本 2 是否在终端上产生输出?该输出将在命令提示符后打印,您需要按回车键以在其后获得 another 提示符。但您不必这样做,您只需键入命令而无需其他提示。
  • 当您作为 cron 作业运行时,没有命令提示符,所以我看不出这会是什么问题。
  • 你不需要脚本二。您可以将其转换为函数并将其放入 script1 中,另一个问题是您正在以不受控制的方式运行 convert.sh。你无法预见会创建多少进程,你可以重载linux
  • 谢谢,Barmar - 我认为你是对的,当脚本 1 完成时,它应该让我回到提示符。唉,这不是发生的事情。可以直观地假设,由于 cron 没有在终端中运行,因此终端行为是无关紧要的,但我相对较新,很高兴验证这种直觉。

标签: bash cron background-process


【解决方案1】:

你不需要脚本 2。你可以将它转换为函数并将它放在脚本 1 中。

另一个问题是您以不受控制的方式运行 convert.sh。您无法预见将创建多少进程(后台进程),这可能会导致严重的性能开销。

最后,如果您无法以正常方式结束进程,您可以选择使用 cron 再次终止它,方法是发出 pkill script1.sh

【讨论】:

  • 谢谢,Simonare - 我没有完全描述我想要做什么,也没有包含足够的代码来展示它。我正在尝试对转换过程进行多线程处理,这样它就不会永远持续下去。据我了解,如果我只使用一个脚本,则每次转换都需要在下一次开始之前完成。脚本 1 的“真实”版本限制了启动的进程数量,以免使服务器不堪重负。你是说如果我把转换命令变成一个函数,我可以从一个脚本启动多个线程?
猜你喜欢
  • 2021-02-25
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
相关资源
最近更新 更多