通过Fabric运行一个希望执行后台命令的shell脚本

2 投票
3 回答
1635 浏览
提问于 2025-04-18 05:57

我刚接触Fabric,想要在后台运行一个命令,这个命令是用shell脚本写的,我需要通过Fabric来执行它。假设我有一个shell脚本命令,内容如下:

#!/bin/bash/
java  &

这个文件叫做myfile.sh

现在在Fabric中,我用以下代码来运行我的脚本:

put('myfile.sh', '/root/temp/')
sudo('sh /root/temp/myfile.sh')

理论上,这应该会在后台启动一个Java进程,但当我登录到机器上,用jobs命令查看正在运行的任务时,却什么都没有显示。

请问问题出在哪里呢?希望能给点提示。

3 个回答

1

我使用 run("screen -d -m sh /root/temp/myfile.sh",pty=False) 这个命令。这会启动一个新的 screen 会话,并且是“分离模式”,也就是说即使连接断开,它也会继续运行。我使用 pty=False 这个 选项,因为我发现当连接到多个主机时,如果不加这个选项,进程在所有主机上都不会启动。

1

可能在你返回之前,那个进程就已经存在了。当你输入java的时候,通常会显示帮助信息然后退出。你可以试试加个睡眠语句,或者其他让程序停留一会的东西。如果你想让它在后台运行,可以在sudo命令后面加上&符号。

4

使用它与

run('nohup PATH_TO_JMETER/Jmetercommand & sleep 5; exit 0)

撰写回答