[Fabric]Fabric With Nohup 执行方式
2014-06-12 10:32
295 查看
Fabric是Python的远程SSH命令行工具,常用来实现服务远程管理及持续化部署。最近需要在集群中执行离线任务,在官方文档中有例子
但按照这种写法在实际操作中并无法正确执行相应的任务,折腾一阵后发现这是由于Fabric过早关闭了连接的Session导致的,可以用一个小技巧避免这个问题:
原文地址
这个和同事讨论了下,说用 shell脚本在服务器端写好,然后在远程调用
单步部署的时候是这么一行命令:
在服务端直接执行就行了。
实验一: 直接把脚本写到startcelery.sh中
内容如下:
py中这么写
实验二:startcelery.sh的脚本这么写
py中这么写
也就是说,可以通过加sleep在命令行中,或者是加重定向在shell脚本中远程调用来解决nohup的问题。
<span style="font-family: Arial, Helvetica, sans-serif;">run("nohup yes >& /dev/null < /dev/null &")</span>
但按照这种写法在实际操作中并无法正确执行相应的任务,折腾一阵后发现这是由于Fabric过早关闭了连接的Session导致的,可以用一个小技巧避免这个问题:
run("$(nohup yes >& /dev/null < /dev/null &) && sleep 1")
原文地址
这个和同事讨论了下,说用 shell脚本在服务器端写好,然后在远程调用
单步部署的时候是这么一行命令:
nohup python manage.py celeryd -l info &
在服务端直接执行就行了。
实验一: 直接把脚本写到startcelery.sh中
内容如下:
echo "start...celery" > celery.log nohup python manage.py celeryd -l info & echo "end...celery" >> celery.log
py中这么写
run("./startcelery.sh ")然后远程执行,发现开始和结束都已经记录到log中了,但是服务没有启动成功。
实验二:startcelery.sh的脚本这么写
echo "start...celery" > celery.log nohup python manage.py celeryd -l info >& /dev/null < /dev/null & echo "end...celery" >> celery.log
py中这么写
run("./startcelery.sh ")然后远程执行,服务成功启动。
也就是说,可以通过加sleep在命令行中,或者是加重定向在shell脚本中远程调用来解决nohup的问题。
相关文章推荐
- teamcity执行jmeter脚本使用Executable with parameters方式不能正确运行解决思路
- isql命令行方式执行脚本,脚本中不能有/**/的跨行注释
- ADO的异步执行方式
- Oracle动态执行SQL四种方式的例子
- 用nohup命令让Linux下程序永远在后台执行--zz牧云IT生活
- [开发故事]第一回:用简单方式,实现多个可执行文件的合并和执行?
- SqlCommand的4种执行方式
- shell 脚本的执行方式
- 数据绑定方式影响执行效率
- 执行Shell脚本的方式
- 从一个 LNK (快捷方式)取得该快捷方式的指向 EXE(可执行档)?
- 在VC中调用“打开方式...”(open with...)对话框
- Web Service with Https in C++ 非托管方式
- 解决Rational rtmanager命令行方式无法执行多用户的Bug
- 传统语言的编译和执行方式和C#、Java有什么不同?
- 异步执行方式改称同步执行方式
- servlet的实例变量是线程不安全的,而其JSP也默认是以多线程方式执行(原创)
- 使用ODBC和OLEDB两种方式执行同一个存储过程,结果不同的问题!
- c++ 重载 覆盖 隐藏的区别和执行方式
- 用nohup命令让Linux下程序永远在后台执行