linux – BASH … GNU Parallel
绞尽脑汁并抓取谷歌找到一种方法来获取带有超时选项的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |