使用 nohup 或 setsid 逃避 alarm() 进程超时?
escape alarm() process timeout with nohup or setsid?
我有一个监控应用程序 Zabbix 代理,它允许我 运行 任意 commands/scripts 并获取 return 值。代理配置了超时,任何超过超时的命令都会被杀死。
对于每个 运行 命令,它首先通过 alarm(timeout) and then forks the agent process 设置超时,然后 运行 通过 execl("/bin/sh", "sh", "-c", command, NULL)
在新的 shell 中设置命令.
我有一个尴尬的场景,我无法将代理配置超时调整为大于 2 秒,但我需要 运行 的命令将需要 10-30 秒。
所以我想知道是否有人知道我可以指定一个命令,当 运行 可以逃避超时和 运行 直到完成。我正在尝试 nohup
或 setsid
认为它不会继承父级中设置的超时,但由于某种原因它仍然被杀死。
这是我的例子.. 代理期望 1
在它的超时内被 returned 所以我在 subshell 中开始我的长 运行ning 命令并且echo 1
立即安抚它。 /opt/scripts/test/long_running.sh
仍然会被杀死。我希望 运行 nohup 和 subshell 它会逃脱超时。
UserParameter=my.test.cmd,nohup sh -c "(/opt/scripts/test/long_running.sh &); echo 1"
感谢阅读。
fLo
nohup
通常会抑制输出并打印其他内容,因此服务器可能会看到 Redirecting output to nohup.out
而不是预期的 1
.
试试
echo 1; nohup sh -c "/opt/scripts/test/long_running.sh " >& /dev/null
我有一个监控应用程序 Zabbix 代理,它允许我 运行 任意 commands/scripts 并获取 return 值。代理配置了超时,任何超过超时的命令都会被杀死。
对于每个 运行 命令,它首先通过 alarm(timeout) and then forks the agent process 设置超时,然后 运行 通过 execl("/bin/sh", "sh", "-c", command, NULL)
在新的 shell 中设置命令.
我有一个尴尬的场景,我无法将代理配置超时调整为大于 2 秒,但我需要 运行 的命令将需要 10-30 秒。
所以我想知道是否有人知道我可以指定一个命令,当 运行 可以逃避超时和 运行 直到完成。我正在尝试 nohup
或 setsid
认为它不会继承父级中设置的超时,但由于某种原因它仍然被杀死。
这是我的例子.. 代理期望 1
在它的超时内被 returned 所以我在 subshell 中开始我的长 运行ning 命令并且echo 1
立即安抚它。 /opt/scripts/test/long_running.sh
仍然会被杀死。我希望 运行 nohup 和 subshell 它会逃脱超时。
UserParameter=my.test.cmd,nohup sh -c "(/opt/scripts/test/long_running.sh &); echo 1"
感谢阅读。
fLo
nohup
通常会抑制输出并打印其他内容,因此服务器可能会看到 Redirecting output to nohup.out
而不是预期的 1
.
试试
echo 1; nohup sh -c "/opt/scripts/test/long_running.sh " >& /dev/null