問題
- 工作中遇到項目啓動,分爲5個jar,項目有啓動和關閉都有順序要求,在使用fabric直接執行nohup stop.sh &的時候,發現並沒有執行成功過了,只會在遠程機器上短時間看到該命令進程存在,然後退出,沒有執行成功。
解決辦法
- 使用已經存在daemon技術,如init、supervisord、upstart、systemd等
- 使用screen、tmux、dtach等工具來從當前shell中detach進程,注意關閉pty
- 使用nohup
nohup方式(比較麻煩,不推薦)
(nohup sh stop.sh >& /dev/null < /dev/null &) && sleep 1
# 下面這個沒有嘗試
nohup sh -c "( ( sh stop.sh &>/dev/null ) & )
如果腳本中含有nohup啓動,記得也要按上述方式
dtach方式
# 安裝
# yum install dtach -y
from fabric import Connection, Config
config = Config(overrides={'load_ssh_configs':False,"run.pty": False
cmd='cd /root/server && sh start.sh'
re = Connection(host=host, connect_timeout=2, config=config).run('dtach -n `mktemp -u /tmp/%s.XXXX` %s' % ('startGs',cmd))
screen(推薦)
# 安裝
# yum install screen -y
from fabric import Connection, Config
config = Config(overrides={'load_ssh_configs':False,"run.pty": False})
Connection(host=host, connect_timeout=2, config=config).run("screen -dmS test1 bash -c 'source /etc/profile && cd /root/server && sh start.sh && sleep 360'")