加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – BASH … GNU Parallel

发布时间:2020-12-13 23:10:26 所属栏目:Linux 来源:网络整理
导读:绞尽脑汁并抓取谷歌找到一种方法来获取带有超时选项的sem命令,以便在超时时给我一个退出代码.它不一定是通过sem,它只是一种痛苦,因为我需要根据是否最终应用不同的动作: 我从被调用的脚本得到了一个OK响应 从调用的脚本中我得到的东西都没问题 通话超时 在
绞尽脑汁并抓取谷歌找到一种方法来获取带有超时选项的sem命令,以便在超时时给我一个退出代码.它不一定是通过sem,它只是一种痛苦,因为我需要根据是否最终应用不同的动作:

>我从被调用的脚本得到了一个OK响应
>从调用的脚本中我得到的东西都没问题
>通话超时

在这种情况下,信号量用于限制对脚本的调用,我将文件列表传递给传出消息队列.正如您在下面的粗略测试示例中所看到的,我能够处理前两个场景,但我不能为我的生活得到任何输出,我可以使用从超时终止的进程(即outputtest.sh有睡眠6;回声测试)

sem --jobs 3 --timeout 3 -u 
'runproc=$(bash outputtest.sh q_xxxx); if [ "$runproc" == "00" ]; 
then echo "OK"; else mv ./q_xxxx ./err/err_xxxx; fi'

任何提示?

解决方法

GNU Parallel等待信号量可用,然后它分叉到后台并运行作业 – 如果超时则可能会将其删除.

因此sem在作业完成之前和超时之前返回.因此,sem无法告诉您作业是否会失败或在稍后的某个时间超时.

可能的解决方法是使用金丝雀,以便您可以查看作业是否完成:

rm canary
sem 'your_job; echo the job completed > canary'

如果sem是从不同的并行运行脚本启动的,那么–fg可能是你的解决方案:它将阻塞直到作业完成,如果作业失败/超时则退出值为1,但其他并行运行的脚本将能够使用相同的信号量.

另一种方法是–joblog,你可以从中读取退出值(超时会给出-1和15作为信号).但是这对sem不起作用,所以你必须重写程序以使用parallel(而不是–semaphore).

要处理消息队列,您可能需要查看此消息:http://www.gnu.org/software/parallel/man.html#example__gnu_parallel_as_queue_system_batch_manager

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读