5

我正在使用 Fabric 来初始化 postgres 服务器。我必须在命令末尾添加“sleep 1”,否则 postgres 服务器进程会死掉而没有解释或日志中的条目:

sudo('%(pgbin)s/pg_ctl -D %(pgdata)s -l /tmp/pg.log restart && sleep 1' % env, user='postgres')

也就是说,我在终端上看到了这个输出:

[dbserv] 执行任务 'setup_postgres'
[dbserv] 运行:/bin/bash -l -c "sudo -u postgres /usr/lib/postgresql/9.1/bin/pg_ctl -D /data/pg -l /tmp/pg .log restart && sleep 1"
[dbserv] out:等待服务器关闭.... done
[dbserv] out:服务器已停止
[dbserv] out:服务器正在启动

没有&& sleep 1, /tmp/pg.log 中没有任何内容(尽管文件已创建),并且没有 postgres 进程正在运行。随着睡眠,一切正常。

(如果我直接在目标机器的命令行上执行相同的命令,它可以在没有睡眠的情况下正常工作。)

既然它正在工作,那并不重要,但还是在问:有人知道睡眠允许发生什么以及为什么?

4

1 回答 1

4

您也可以尝试使用pty 选项将其设置为 false 并查看它是否与织物处理伪 tty 的方式有关。

于 2012-09-06T16:51:59.773 回答