使用fabric和screen运行分离进程

2 投票
1 回答
1683 浏览
提问于 2025-04-18 17:02

根据常见问题解答,在推荐的后台运行程序的方法中,只有screen对我有效,因为我不能在服务器上安装程序,也无法让nohup正常工作。我想要做到以下几点:

  • 运行一个命令,让它在后台持续运行,而不会阻塞其他操作。
  • 知道我正在运行的进程的pid(进程ID),这样我可以在需要的时候把它杀掉。

到目前为止,nohup的重定向和screen -md command的组合都没有成功。

特别是,当我直接在服务器上执行这条命令时,它是可以工作的,但通过fabric的run函数执行时却不行。我觉得当这个函数返回时,进程就关闭了,我根本没时间去查看它:

nohup /opt/logstash/bin/logstash agent -f /home/unicryo/PVSS_projects/GenerateErrors/logstash_conf/logstash-config-minimum.cfg >> test.out 2>&1 &

1 个回答

1

你无法使用 nohup 来后台运行这个进程,因为它在 Fabric 中并不真正支持。

我强烈建议你通过进程管理工具来运行这个命令(可以查看 Fabric 的文档建议),这样管理起来会简单得多(比如用 service logstash stop 来停止服务,而不是去找在屏幕会话中运行的命令),而且这样也更整洁。不过,你可以尝试用 Fabric 来做一些类似下面的事情:

run("screen -d -m '/opt/logstash/bin/logstash agent -f /home/unicryo/PVSS_projects/GenerateErrors/logstash_conf/logstash-config-minimum.cfg'")

撰写回答