我有一个名为test.sh的shell脚本。如何从Ruby触发test.sh?
我希望test.sh作为后台进程运行,这意味着在Ruby中它是一个ansync调用。
还需要将STDERR和STDOUT写入特定文件。
有什么想法吗?
答案 0 :(得分:25)
@ TanzeebKhalili的答案有效,但您可以考虑Kernel.spawn(),它不会等待该过程返回:
pid = spawn("./test.sh")
Process.detach(pid)
请注意,根据文档,无论您使用spawn()
还是手动fork()
和system()
,都应该获取PID Process.detach()
或{{1}在退出之前。
关于重定向标准错误和输出,使用Process.wait()
:
spawn()
答案 1 :(得分:9)
试试这个:
Process.fork { system "./test.sh" }
无法在Windows上使用,您可以使用线程。
答案 2 :(得分:0)
我认为IO.popopen
在这里也值得一提。诸如此类的东西会附加多次运行命令的输出。到stdout.log
和stderr.log
open('stdout.log', 'a') { |file|
file.puts(
IO.popen(["./test.sh"], :err => ["stderr.log", "a"]) { |result|
result.read
}
)
end