【发布时间】: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