Laravel SSH - 创建tmux会话

时间:2016-02-16 23:08:29

标签: laravel ssh tmux

我有以下内容:

import psycopg2
import gzip
conn_string="dbname='<>' port='5439' user='<>' password='<>' host='<>'";
print "Connecting to database\n          ->%s"%(conn_string)
conn=psycopg2.connect(conn_string);
cursor=conn.cursor();
with gzip.open('<gzip filelocation>','r') as l:
    for line in l:
    cursor.execute('copy <table_name from %s with delimiter '\t'", (line,))

这会输出以下错误:

  

开放终端失败:不是终端

是否可以通过这种方式创建tmux会话?

1 个答案:

答案 0 :(得分:0)

使用Laravel SSH无法做到这一点。但是,Laravel的SSH组件在内部使用phpseclib SSH,直接使用时更灵活。

现在我假设您正在尝试创建tmux会话以启动某些进程,您希望在SSH连接结束后继续在后台运行该进程。好的部分是因为phpseclib是Laravel SSH的依赖,它已经存在,所以没有必要安装它。我对tmux及其选项不太熟悉,但我可以提供使用screen的解决方案:

use \phpseclib\Net\SSH2;
use \phpseclib\File\ANSI;

$ssh = new SSH2('host');
$ansi = new ANSI();

if ($ssh->login('username', 'password')) {
    // The command below will start a screen
    // session and automatically detach it
    $ssh->write("screen -m -d -S processes top\n");

    // You can include the lines below to see the
    // output of the write command converted to HTML
    $ansi->appendString($ssh->read());
    echo $ansi->getScreen();
}

这将创建一个名为screen的新自动分离processes会话,并在其中运行top命令。要连接到会话,您只需在控制台中运行它:

ssh username@host -t "screen -r processes"

这将重新连接processes会话,以便您了解正在进行的操作。当然,如果您有偏好,可以根据tmux进行调整。