使用fabric和screen运行分离进程
根据常见问题解答,在推荐的后台运行程序的方法中,只有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'")