我有一个监视应用程序Zabbix代理,它允许我运行任意命令/脚本并获取返回值。代理配置了超时,任何超过超时的命令都将被杀死。
对于每个运行的命令,它首先通过alarm(timeout)设置超时,然后派生代理进程,然后通过来在新shell中运行该命令execl("/bin/sh", "sh", "-c", command, NULL)
。
我有一个尴尬的场景,我无法将代理配置超时调整为大于2秒,但是我需要运行的命令将花费10-30秒。
所以我想知道是否有人知道我可以指定一个命令,该命令在运行时可以逃逸超时并运行到完成。我试图nohup
或setsid
认为它不会继承在父级中设置的超时,但是由于某种原因它仍然被杀死。
这是我的示例。代理期望1
在其超时时间内返回,因此我在subshell中启动了长时间运行的命令,并1
立即回显以安抚它。在/opt/scripts/test/long_running.sh
仍然被打死,但。我希望使用nohup并在子外壳中运行可以避免超时。
UserParameter=my.test.cmd,nohup sh -c "(/opt/scripts/test/long_running.sh $1 &); echo 1"
谢谢阅读。
低频
nohup
通常会抑制输出并打印其他内容,因此服务器可能看到的Redirecting output to nohup.out
不是预期的1
。
尝试类似的东西
echo 1; nohup sh -c "/opt/scripts/test/long_running.sh $1" >& /dev/null
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句