如何将命令传递给屏幕会话?

时间:2014-07-11 21:26:56

标签: node.js linux bash gnu-screen

我正在编写一个Linux shell脚本,我需要在其中启动一个新的屏幕会话,在屏幕上运行node.js服务器,然后从屏幕上分离,以便我的服务器在后台运行。

现在,这些是我手动运行的命令:

screen
node server.js
[detach screen]

但是,我需要一种通过脚本自动执行此操作的方法,如果我只是在shell脚本中使用上述命令,它会创建屏幕并卡在那里。如何将“node server.js”命令传递给屏幕命令?

编辑:

基于建议的答案,我有一个可行的脚本,除了我需要手动创建一个屏幕并在运行之前从中分离。我尝试添加screen -d -m作为创建分离屏幕的第一行,但脚本在该行之后挂起。

tempfile=$(mktemp)
indices=`tail -1 debug.log`
cat > $tempfile <<EOF
node server $indices
EOF
screen -X readbuf $tempfile 
screen -X paste . 
rm -f $tempfile

如何使用脚本创建和分离屏幕?

这也不起作用:     屏幕     屏幕-d

2 个答案:

答案 0 :(得分:1)

这很简单: screen -md node server.js 这需要命令作为服务运行(就像它一样),否则屏幕会立即停止。

还可以选择设置会话名称(例如“会话名称”): screen -mdS session-name node server.js 然后,您可以通过以下方式附加到屏幕: screen -rd session-name 如果要将所有输出重定向到文件,可以这样做: screen -mdS session-name bash -c 'node server.js &> output.log' 然后,您可以监视输出,例如: tail -f output.log

您可以列出正在运行的屏幕: screen -ls 要么 screen -list

示例:在分离的屏幕中启动Python3 Web服务器

启动一个侦听端口8000的Python3 Web服务器,该服务器以命名方式提供当前目录中的文件 分离屏幕: screen -mdS my-web-server python3 -mhttp.server 或者,通过记录到文件: screen -mdS my-web-server bash -c 'python3 -mhttp.server &> output.log' 对于Python 2.x,它看起来像这样: screen -mdS my-web-server bash -c 'python -mSimpleHTTPServer &> output.log'

答案 1 :(得分:0)

编辑:试试这个:

tempfile=$(mktemp)
cat > $tempfile <<EOF
node server.js
EOF
screen -S SessionName -X readbuf $tempfile; screen -RdS SessionName
screen -X paste .
rm -f $tempfile

它应该创建临时文件,创建一个名为SessionName的屏幕并运行命令,然后删除临时文件。如果有效,请告诉我。