Fabric遠程後臺執行耗時腳本解決方法

問題

  • 工作中遇到項目啓動,分爲5個jar,項目有啓動和關閉都有順序要求,在使用fabric直接執行nohup stop.sh &的時候,發現並沒有執行成功過了,只會在遠程機器上短時間看到該命令進程存在,然後退出,沒有執行成功。

解決辦法

  1. 使用已經存在daemon技術,如init、supervisord、upstart、systemd等
  2. 使用screen、tmux、dtach等工具來從當前shell中detach進程,注意關閉pty
  3. 使用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'")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章