{"title": "\u4f7f\u7528Screen\u8dd1\u540e\u53f0\u547d\u4ee4", "update_time": "2014-07-02 09:34:02", "tags": "screen \u540e\u53f0", "pid": "304", "icon": "linux.png"}
## 缘起 Screen虽然几年没更新了,但依然满足我日常的很多需求,而且是所有Redhat、CentOS自带的终端模拟软件。 今天有这样的一个需求:要在批量在一堆机器上跑较长时间的命令。 虽然用nohup的后台方式已经满足了我的需求,但这次我想用screen来尝试一下批量跑后台任务的方式。 ## 方法 Google了一下发现Screen有另外一种用法,可以启动一个Activate的Screen但不Attach,又可以跑命令,那是极好的 ``` screen -dmS 名字 命令 ``` 实际上跑的时候我们会这么用 ``` screen -dmS mytest /bin/bash -c 'top;exec /bin/bash' ``` 以上命令说明: * mytest 是启动的screen的名字 * /bin/bash -c 'top;exec /bin/bash' 是要跑的命令 * 最后为什么要加exec /bin/bash? 好处是结束后不会导致screen自动退出而看不了任务跑的日志 好了,现在可以pssh来启动命令了 ``` pssh -i -h iplist "screen -dmS mytest /bin/bash -c 'top;exec /bin/bash'" ``` 最后,我们的程序跑完了,可以登录到机器上看看有没有问题。都ok了,就杀掉这些screen ``` pssh -i -h iplist "screen -X -S mytest quit" ``` ## 参考 * http://unix.stackexchange.com/questions/47271/prevent-gnu-screen-from-terminating-session-once-executed-script-ends * http://stackoverflow.com/questions/1509677/kill-detached-screen-session